对3D numpy数组中的向量应用函数

0 投票
1 回答
947 浏览
提问于 2025-04-18 14:15

我有一个关于如何在3D numpy数组中对向量应用函数的问题。我的问题是这样的:假设我有一个像这样的数组:

a = np.arange(24)
a = a.reshape([4,3,2])

我想对所有后面的向量应用一个函数来修改它们:

[0 6], [1 7], [2 8], [4 10], [3 9] ...

使用什么方法最好呢?因为我的数组比较大,在三个维度中的两个维度上循环会很慢……

提前谢谢你们!

1 个回答

1

你可以使用函数 np.apply_along_axis。在文档中这样描述:

这个函数可以对给定轴上的一维切片应用一个函数。

举个例子:

>>> import numpy as np
>>> a = np.arange(24)
>>> a = a.reshape([4,3,2])
>>> 
>>> def my_func(a):
...   print "vector: " + str(a)
...   return sum(a) / len(a)
... 
>>> np.apply_along_axis(my_func, 0, a)
vector: [ 0  6 12 18]
vector: [ 1  7 13 19]
vector: [ 2  8 14 20]
vector: [ 3  9 15 21]
vector: [ 4 10 16 22]
vector: [ 5 11 17 23]
array([[ 9, 10],
       [11, 12],
       [13, 14]])

在上面的例子中,我使用的是第0个轴。如果你需要处理 n 个轴,你可以执行这个函数 n 次。

撰写回答