让我用一个例子说明这个问题:
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的方法可以避免显式迭代。它是什么?
答案 0 :(得分:1)
如果我理解你的问题你可以简单地使用矩阵乘法:
result = numpy.dot(matrix, base)
如果结果必须与示例中的形状相同,则只需添加一个整形:
result = numpy.dot(matrix, base).reshape((5,1))
如果矩阵不对称,请注意点的顺序。
答案 1 :(得分:0)
这是另一种丑陋的方式:
n.apply_along_axis(base.__getitem__, 0, matrix).reshape((5,1))
答案 2 :(得分:0)
我的尝试:
numpy.sum(matrix * base, axis=1)