Python 使用元组列表作为2D Numpy数组中列乘积的索引
我有一个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
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
asresult
,它的列是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]
太棒了,非常感谢你!我知道必须有一种简单/优雅的方式来做,你做到了:)。