Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy.max的惰性计算_Python_Numpy_Functional Programming_Lazy Evaluation - Fatal编程技术网

Python numpy.max的惰性计算

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): 输

假设我有一个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
):

输出

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