Python numpy.max的惰性计算
假设我有一个1D numpy数组Python numpy.max的惰性计算,python,numpy,functional-programming,lazy-evaluation,Python,Numpy,Functional Programming,Lazy Evaluation,假设我有一个1D numpy数组x,形状(n,)主要由零组成,还有一个2D数组Y,形状(m,n)。我想计算 np.sum(x * np.max(Y,axis=0)) i、 e.x与矩阵Y的点积,通过取每列的最大值进行展平。如果这些数组很大,并且x主要由零组成,那么我可能正在执行大量浪费的max操作 是否有任何方法可以以惰性方式进行计算,以便仅对非零值计算最大值?我正在寻找一种优雅的方法——显然,我可以编写for循环并检查零值 您可以使用np.where查找非零索引。例如(m=3和n=6): 输
x
,形状(n,)
主要由零组成,还有一个2D数组Y
,形状(m,n)
。我想计算
np.sum(x * np.max(Y,axis=0))
i、 e.x
与矩阵Y
的点积,通过取每列的最大值进行展平。如果这些数组很大,并且x
主要由零组成,那么我可能正在执行大量浪费的max
操作
是否有任何方法可以以惰性方式进行计算,以便仅对非零值计算最大值?我正在寻找一种优雅的方法——显然,我可以编写for循环并检查零值 您可以使用
np.where
查找非零索引。例如(m=3
和n=6
):
输出
36.0
不确定它是否与函数式编程有关,但是
0*NaN=NaN
,0*Infinity=NaN
,0*-1=-0
唯一有可能提高速度的方法是使用mask=x=0
选择Y
的列或行进行进一步处理。我还没有计算出你的尺寸,看看这是否可行。np.max(Y,1)
有形状(m,)。*
是如何(n,)成形的x
?我认为@hpaulj有一个好主意。下面是如何实现它的:np.sum(x[mask]*np.max(Y[mask,:],axis=1))
。但是你需要在你的实际数据上测试它,看看它是否真的更快。现在你需要做一些计时来确定什么时候更快!我把它作为OP的任务,为了所有人的利益在这里发布结果。
36.0