Python 使用元组列表作为2D Numpy数组中列乘积的索引

Python 使用元组列表作为2D Numpy数组中列乘积的索引,python,numpy,multidimensional-array,Python,Numpy,Multidimensional Array,我有一个2D 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

我有一个2D 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.array
as
result
,它的列是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
的每个索引,并循环遍历每个tup的条目数,但是由于每个产品的术语数在不同的迭代中有所不同,因此我很难写出产品。非常感谢任何帮助或指导!稍微偏爱基本Python和/或Numpy解决方案

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]

太棒了,非常感谢你!我知道必须有一种简单/优雅的方式来做,你做到了:)。