【问题标题】:Using a list of tuples as indices for the product of columns in a 2D Numpy array使用元组列表作为 2D Numpy 数组中列乘积的索引
【发布时间】:2020-10-12 05:38:44
【问题描述】:

我有一个二维 numpy 数组 A 和一个元组列表 tup,看起来像:

A = np.array(range(1,11)).reshape(-3,2)
A
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10]])

tup = [(0,),
 (1,),
 (0, 1),
 (0, 0),
 (1, 1),
 (0, 1, 1),
 (1, 1, 1),
 (0, 0, 0),
 (0, 0, 1)]

我希望创建一个新的np.arrayresult,其列是A 列的乘积:要在乘积中使用的列的索引由元组中的值给出。例如,上面应该产生:

[[1,3,5,7,9],
[2,4,6,8,10],
[2,12,30,56,90],
[1,9,25,49,81],
[4,16,36,64,100],
[4,48,180,448,900],
...]]

上面的行对应的位置:

[A[0],
A[1],
A[0]*A[1],
A[0]*A[0],
A[1]*A[1],
A[0]*A[1]*A[1],
A[1]*A[1]*A[1],
...]

元组可以是任意长度 >= 1。到目前为止,我已经尝试遍历 tup 的每个索引并遍历每个元组的条目数,但我很难写出给定的产品每个产品的术语数因不同的迭代而异。非常感谢任何帮助或指导!略微偏爱基础 Python 和/或 Numpy 解决方案。

【问题讨论】:

    标签: python numpy multidimensional-array


    【解决方案1】:
    In [135]: A = np.array(range(1,11)).reshape(-3,2)
    In [136]: tup = [(0,),
         ...:  (1,),
         ...:  (0, 1),
         ...:  (0, 0),
         ...:  (1, 1),
         ...:  (0, 1, 1),
         ...:  (1, 1, 1),
         ...:  (0, 0, 0),
         ...:  (0, 0, 1)]
    

    让我们尝试一些索引

    In [137]: A[0,tup[0]]
    Out[137]: array([1])
    In [138]: A[0,tup[1]]
    Out[138]: array([2])
    In [141]: A[0,tup[2]]
    Out[141]: array([1, 2])
    

    或者对于A的所有行:

    In [142]: A[:,tup[2]]
    Out[142]: 
    array([[ 1,  2],
           [ 3,  4],
           [ 5,  6],
           [ 7,  8],
           [ 9, 10]])
    

    以及想要的产品:

    In [143]: np.prod(A[:,tup[2]],axis=1)
    Out[143]: array([ 2, 12, 30, 56, 90])
    

    现在对tup 的元素执行此操作。

    [np.prod(A[:,k],axis=1) for k in tup]
    

    【讨论】:

    • 太棒了,非常感谢!我知道必须有一种简单/优雅的方式来做到这一点,而你做到了:)。
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多