首页 > 解决方案 > NumPy 为每个子张量沿轴指定函数应用?

问题描述

假设有一个A形状矩阵(N, M)和一些dtype. 然后,有一个shape的numpy函数向量。因为它可能很重要,对于我的具体情况,以千为单位(例如 4000)和以单位为单位(例如 9)的范围。B(N, )NM

示例 ( N=5, M=3):

A =
[
    [0.1, 0.2, 0.3],
    [4.02, 123.4, 534.65],
    [2.32, 22.0, 754.01],
    [5.41, 23.1, 1245.5],
    [6.07, 0.65, 22.12],
]

B = [
    np.min,
    np.max,
    np.argmin,
    np.argmin,
    np.min
]

B[i]将始终是np.min,np.max或.np.argminnp.argmax

我想对 执行操作axis=1,特别是B[i]对执行操作A[i, :],产生以下输出:

[ 0.1, 534.65, 0, 0, 0.65 ]

在 NumPy 中可以实现这样的事情吗?

一种可能的解决方案是A根据 上的等价组进行拆分B,沿 应用单个操作axis=1,重新索引组并将它们合并回来,但这听起来非常低效。如果可能的话,我想避免这种情况。

如果我的提议对你来说听起来很荒谬,请告诉我。

标签: pythonnumpy

解决方案


为什么这对您来说不可行?:

A = np.array(A) # A originally is what you have given
B = [...] # what you have given

for i in range(len(B)):
    print( np.apply_along_axis(B[i], 0, A[i,:]) )

注意:它比B[i](A[i,:])递归更快。检查此链接(这是numpy文档)


推荐阅读