繁体   English   中英

将函数应用于numpy数组的每个矩阵

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM