numpy.max 的惰性评估

Lazy evaluation of numpy.max

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

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

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

有没有办法以惰性方式进行计算,以便只计算非零值的最大值?我正在寻找一种优雅的方式 - 显然,我可以编写一个 for 循环并检查零值。

您可以使用 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