pce*_*con 6 python axis numpy matrix
我已经看到了几个代码使用numpy.apply_along_axis,我总是要测试代码,看看它是如何工作的,因为我还没有理解axisPython中的想法.
例如,我从参考文献中测试了这个简单的代码.
我可以看到,对于第一种情况,它采用了矩阵每行的第一列,而在第二种情况下,考虑了行本身.
所以我构建了一个例子来测试它如何与一个矩阵数组合(这个问题带我到这个轴问题),它也可以看作是一个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)
Run Code Online (Sandbox Code Playgroud)
哪个给了我:
array([[ 2.5, 3.5, 4.5],
[ 5.5, 5.5, 5.5]])
Run Code Online (Sandbox Code Playgroud)
和:
array([[ 1.5, 2.5, 3.5],
[ 6.5, 6.5, 6.5]])
Run Code Online (Sandbox Code Playgroud)
对于第一个结果,我得到了我的预期.但对于第二个,我会收到:
array([[ 2., 3.],
[ 5., 8.]])
Run Code Online (Sandbox Code Playgroud)
然后,我可能应该是一个axis=2,我得到了以前的测试结果.所以,我想知道这是如何正常工作的.
谢谢.
首先,data=numpy.array(a)已经足够了,不需要使用numpy.array([b for b in a])。
data现在是 3Dndarray形状(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),其余轴的形状,第二和第三或第一和第三。
numpy.apply_along_axis(my_func, 2, data)返回(2,2)您显示的形状数组,其中是沿着第三个轴(通过给出 index )(2,2)时前两个轴的形状。apply2
理解它的方法是,无论您沿哪个轴应用,都将“折叠”为您的形状my_func,在本例中返回单个值。其余轴的顺序和形状将保持不变。
另一种思考方式是:apply_along_axis对于剩余轴的每个组合,将该函数应用于该轴上的值。获取结果,并将它们组织回剩余轴的形状。因此,如果my_func返回tuple4 个值中的 a:
def my_func(x):
return (x[0] + x[-1]) * 2,1,1,1
Run Code Online (Sandbox Code Playgroud)
我们预计会numpy.apply_along_axis(my_func, 0, data).shape是(4,2,3)。
numpy.apply_over_axes在多个轴上重复应用函数| 归档时间: |
|
| 查看次数: |
2314 次 |
| 最近记录: |