2009-01-14 30 views
1

让我用一个例子这样一个问题:如何使用二维布尔数组在numpy中以行为单位从一维数组中选择?

import numpy 

matrix = numpy.identity(5, dtype=bool) #Using identity as a convenient way to create an array with the invariant that there will only be one True value per row, the solution should apply to any array with this invariant 
base = numpy.arange(5,30,5) #This could be any 1-d array, provided its length is the same as the length of axis=1 of matrix from above 

result = numpy.array([ base[line] for line in matrix ]) 

result现在拥有了想要的结果,但我敢肯定有这样做避免了显式迭代特定numpy的法。它是什么?

回答

1

如果我正确理解你的问题,你可以简单地使用矩阵乘法:

result = numpy.dot(matrix, base) 

如果结果必须有相同的形状你的例子只是增加一个整形:

result = numpy.dot(matrix, base).reshape((5,1)) 

如果矩阵不是对称的小心点的顺序。

0

这里是做这件事的另一种丑陋的方式:

n.apply_along_axis(base.__getitem__, 0, matrix).reshape((5,1)) 
0

我尝试:

numpy.sum(matrix * base, axis=1) 
相关问题