我有这样的功能:
def foo(v, w):
return sum(np.exp(v/w))
其中v开头是一个numpy数组而w是一个数字。现在我想绘制这个函数的值来获得更多的w值,所以我需要一个适用于不同大小的向量的函数。 我现在的解决方案是显而易见的
r = []
for e in w:
r.append(foo(v, e))
但我想知道是否有更好的方法来做到这一点。另外,我想保持低内存,所以我需要避免创建一个大矩阵,然后将函数应用于每个值并对列进行求和(v的长度大于5e + 4,w的长度为1e 3)。
由于
答案 0 :(得分:1)
如果您无法确定v
的长度的上限并确保不超出内存要求,我认为您必须继续使用您的解决方案。< / p>
如果您可以确定v
的长度的上限并使用Mx1000阵列满足您的内存要求,则可以执行此操作。
import numpy as np
v = np.array([1,2,3,4,5])
w = np.array([10.,5.])
c = v / w[:, np.newaxis]
d = np.exp(c)
e = d.sum(axis = 1)
>>>
>>> v
array([1, 2, 3, 4, 5])
>>> w
array([ 10., 5.])
>>> c
array([[ 0.1, 0.2, 0.3, 0.4, 0.5],
[ 0.2, 0.4, 0.6, 0.8, 1. ]])
>>> d
array([[ 1.10517092, 1.22140276, 1.34985881, 1.4918247 , 1.64872127],
[ 1.22140276, 1.4918247 , 1.8221188 , 2.22554093, 2.71828183]])
>>> e
array([ 6.81697845, 9.47916901])
>>>