numpy.max的懒惰评估



假设我有一个形状为(n,)的1D numpy数组x和形状为(m,n)的2D数组Y。我想计算

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

即CCD_ 5与矩阵CCD_。如果这些数组很大,并且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

最新更新