gpt4 book ai didi

python - 理解 Python 中的 Axis

转载 作者:太空狗 更新时间:2023-10-30 00:02:54 26 4
gpt4 key购买 nike

我看过一些使用 numpy.apply_along_axis 的代码,我总是需要测试这些代码以了解它是如何工作的,因为我不理解 axis Python 中的想法。

比如我测试了this来自引用的简单代码。

我可以看到,对于第一种情况,它采用了矩阵每一行的第一列,而在第二种情况中,考虑了行本身。

所以我构建了一个示例来测试它如何与矩阵数组一起工作(这个问题让我想到了这个轴问题),它也可以看作是一个 3d 矩阵,其中每一行都是一个矩阵,对吧?

a = [[[1,2,3],[2,3,4]],[[4,5,6],[9,8,7]]]

import numpy
data = numpy.array([b for b in a])

def my_func(x):
return (x[0] + x[-1]) * 0.5

b = numpy.apply_along_axis(my_func, 0, data)
b = numpy.apply_along_axis(my_func, 1, data)

这给了我:

array([[ 2.5,  3.5,  4.5],
[ 5.5, 5.5, 5.5]])

和:

array([[ 1.5,  2.5,  3.5],
[ 6.5, 6.5, 6.5]])

对于第一个结果,我得到了预期的结果。但是对于第二个,我想我会收到:

array([[ 2.,  3.],
[ 5., 8.]])

然后我认为这可能应该是一个 axis=2 并且我得到了之前测试它的结果。所以,我想知道这是如何正常工作的。

谢谢。

最佳答案

首先,data=numpy.array(a)已经足够了,不用numpy.array([b for b in a])了.

data现在是 3D ndarray 形状(2,2,3) , 并且有 3 个轴 0, 1, 2 .第一个轴的长度为2,第二个轴的长度也为2,第三个轴的长度为3。

因此numpy.apply_along_axis(my_func, 0, data)numpy.apply_along_axis(my_func, 1, data)将产生形状为 (2,3) 的二维数组.在这两种情况下,形状都是 (2,3) ,其余 Axis 的那些,第 2 和第 3 或第 1 和第 3。

numpy.apply_along_axis(my_func, 2, data)返回 (2,2)你显示的形状数组,其中 (2,2)是前两个轴的形状,就像你一样apply沿第三 Axis (通过给出索引 2 )。

理解它的方法是,无论你沿着哪个轴应用,都会“折叠”成你的 my_func 的形状。 ,在本例中返回单个值。其余 Axis 的顺序和形状将保持不变。

另一种思考方式是:apply_along_axis意味着将该函数应用于该 Axis 上的值,对于剩余 Axis/Axis 的每个组合。获取结果,并将它们组织回剩余 Axis 的形状。所以,如果 my_func返回 tuple 4 个值:

def my_func(x):
return (x[0] + x[-1]) * 2,1,1,1

我们期待numpy.apply_along_axis(my_func, 0, data).shape成为(4,2,3) .

关于python - 理解 Python 中的 Axis ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23349128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com