3 回答
TA贡献1798条经验 获得超7个赞
在过去的几天里,我也一直在尝试做类似的事情。我终于设法做到了np.vectorize,使用函数签名。试试下面的代码片段:
fn_vectorized = np.vectorize(interpolate.interp1d,
signature='(n),(n)->()')
interp_fn_array = fn_vectorized(x[np.newaxis, :, :], y)
在这里,我正在对 interp1d 函数进行矢量化。x 和 y 是形状 (mxn) 的数组。目标是为x 的第 i 行和y的第i行生成一个插值函数数组。数组“interp_fn_array”包含插值函数(形状为(1 xm)。
TA贡献1794条经验 获得超8个赞
它可能取决于您需要执行的操作,如果它是一个简单的总和,那么以下将起作用:
import numpy as np
a = np.arange(3*2*20).reshape((20,3,2))
b = np.arange(2*20).reshape((20,2))
res = (a.transpose((1,2,0))+b.transpose((1,0))).transpose((2,0,1))
print(a[0],b[0])
[[0 1]
[2 3]
[4 5]] [0 1]
print(res[0])
[[0 2]
[2 4]
[4 6]]
首先,输入数据被转置,以便在广播操作中涉及正确的维度。求和后,输出转回。
TA贡献1827条经验 获得超4个赞
使用 numpy 的vectorize。
np.vectorize使用简单 lambda 函数的简单示例:
import numpy as np
f = np.vectorize(lambda x: 2*x)
f([[2,3],[3,4],[1,1]])
# output:
array([[4, 6],
[6, 8],
[2, 2]])
添加回答
举报