numpy.max的惰性评估

时间:2018-07-30 18:17:21

标签: python numpy functional-programming lazy-evaluation

假设我有一个形状为x的一维numpy数组(n,),该数组主要由零组成,而一个二维数组Y的形状为(m,n)。我想计算

np.sum(x * np.max(Y,axis=0))

x与矩阵Y的点积通过取每一列的最大值来展平。如果这些数组很大,并且x主要由零组成,那么大概我正在做很多浪费的max操作。

是否有任何方法可以以惰性方式进行计算,以便仅针对非零值来计算最大值?我正在寻找一种优雅的方法-显然,我可以编写一个for循环并检查零值。

1 个答案:

答案 0 :(得分:1)

您可以使用np.where查找非零索引。例如(m=3n=6):

x= np.array([1,0,0,2,3,1])
Y = np.array([[1,2,3,4,5,6],
              [4,5,6,1,2,3],
              [7,8,9,4,5,1]])
ind = np.where(x != 0)[0]
result = sum(x[ind]*np.max(Y[:,ind], axis=0))
print (result)

输出

36.0