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=3
和 n=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
假设我有一个一维 numpy 数组 x
,形状 (n,)
主要由零组成,还有一个二维数组 Y
,形状 (m,n)
。我想计算
np.sum(x * np.max(Y,axis=0))
即x
与矩阵 Y
的点积通过取每列的最大值来展平。如果这些数组很大并且 x
主要由零组成,那么我大概正在做很多无用的 max
操作。
有没有办法以惰性方式进行计算,以便只计算非零值的最大值?我正在寻找一种优雅的方式 - 显然,我可以编写一个 for 循环并检查零值。
您可以使用 np.where
来查找非零索引。例如(m=3
和 n=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