[英]Apply function to every matrix of numpy array
我想对我的(6890,6890,3,3)numpy数组中的每个3x3矩阵应用一个函数。 到目前为止,我尝试在一个较小的示例上使用矢量化,并使用一个较简单的函数,但没有成功。
def myfunc(x):
return np.linalg.norm(x)
m = np.arange(45).reshape(5,3,3)
t = m.shape[0]
r = np.zeros((t, t))
q = m[:,None,...] @ m.swapaxes(1,2) # m[i] @ m[j].T
f = np.vectorize(q, otypes=[np.float])
res = myfunc(f)
向量化是否是有效解决此问题的正确方法,还是我应该尝试其他方法? 我也研究了numpy.apply_along_axis
但这仅适用于一维子numpy.apply_along_axis
。
您需要遍历每个元素并应用函数:
import numpy as np
# setup function
def myfunc(x):
return np.linalg.norm(x*2)
# setup data array
data = np.arange(45).reshape(5, 3, 3)
# loop over elements and update
for item in np.nditer(data, op_flags = ['readwrite']):
item[...] = myfunc(item)
如果您需要对整个3x3阵列应用功能,请使用:
out_data = []
for item in data:
out_data.append(myfunc(item))
输出:
[14.2828568570857, 39.761790704142086, 66.4529909033446, 93.32202312423365, 120.24974012445931]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.