【发布时间】:2022-11-28 10:11:53
【问题描述】:
我想对 2D numpy 数组中的每个元素应用一个函数。以下是我的代码。
def fun(arr1, arr2):
print(arr1)
print(arr2)
sum = 0
for i in range(len(arr1)):
sum += arr1[i] * arr2[i]
return sum
vfun = np.vectorize(fun)
a1 = np.array([[1, 4, 2], [5, 6, 3], [4, 0, 1]])
a2 = np.array([[1, 5, 5], [2, 5, 3]])
for each in a2:
result = vfun(each, a1)
print(result)
我的预期输出:
[31, 50, 9]
[28, 49, 11]
但是我收到以下错误
1
1
TypeError: object of type 'numpy.int64' has no len()
在第一次迭代中,这里调用的不是 fun(a2[0], a1[0]),而是 fun(a2[0][0], a1[0][0])。为什么它会这样?有什么解决办法吗?不允许更改函数“fun(arr1, arr2)”。即,我必须传递两个数组来运行并进行计算。
【问题讨论】:
-
将
print(arr1)添加到您的函数以查看np.vectorize传递给了什么。我敢打赌它是一个标量,而不是一维数组。在遇到问题后,您确实阅读过,甚至重读过np.vectorize? -
(a2[:,:,None]*a1.T).sum(axis=1) -
我在函数中添加了 print(arr1) 和 print(arr2) 并且它给出了更新的输出
-
它只能使用给定的功能来完成(有趣)。我不允许使用其他方法
-
[fun(a1.T,row) 对于 a2 中的行]
标签: numpy numpy-ndarray