无法找到任何有关此的信息。如果我有两个相同维度的 m x n 矩阵,有没有办法在它们上应用 numpty 中的元素函数?为了说明我的 意义:
自定义函数为 F(x,y(
第一个矩阵:
array([[ a, b],
[ c, d],
[ e, f]])
第二个矩阵:
array([[ g, h],
[ i, j],
[ k, l]])
有没有办法在numpy中使用上述两个矩阵来获得所需的输出
array([[ F(a,g), F(b,h)],
[ F(c,i), F(d,j)],
[ F(e,k), F(f,l)]])
我知道我可以做嵌套for
语句,但我认为可能有更干净的方法
对于一般函数F(x,y)
,您可以执行以下操作:
out = [F(x,y) for x,y in zip(arr1.ravel(), arr2.ravel())]
out = np.array(out).reshape(arr1.shape)
但是,如果可能的话,我建议以可以矢量化的方式重写F(x,y)
:
# non vectorized F
def F(x,y):
return math.sin(x) + math.sin(y)
# vectorized F
def Fv(x,y):
return np.sin(x) + np.sin(y)
# this would fail - need to go the route above
out = F(arr1, arr2)
# this would work
out = Fv(arr1, arr2)
您可以使用numpy.vectorize函数:
import numpy as np
a = np.array([[ 'a', 'b'],
[ 'c', 'd'],
[ 'e', 'f']])
b = np.array([[ 'g', 'h'],
[ 'i', 'j'],
[ 'k', 'l']])
def F(x,y):
return x+y
F_vectorized = np.vectorize(F)
c = F_vectorized(a, b)
print(c)
输出:
array([['ag', 'bh'],
['ci', 'dj'],
['ek', 'fl']], dtype='<U2')