这就是我所想的轴,想知道我的理解是否正确
我们从[
的左侧算起左括号0
,这就是axis
eg1)[[1,2],[3,4]]
对于[
,查找所有剩下一个[
的元素,它们都是轴0的元素。([[
代表轴1,依此类推)
0 axis: you see `[`: [x, y] where x = [1,2], y=[3,4]
1 axis: you see `[[`: [[x, y]] where x = [1,3], y = [2,4]
eg2)[[[1,2,3], [4,5,6]], [[7,8,9], [10,11,12]]]
0 axis: you see `[` [x, y] where x = [[1,2,3], [4,5,6]], y= [[7,8,9], [10,11,12]]
1 axis: you see `[[`, x = [1,2,3], [7,8,9] y = [4,5,6], [10,11,12]
2 axis: you see `[[[`, x = [1,4,7,10] y = [2,5,8,11] z = [3,6,9,12]
如果有一个函数沿轴取一个值,我可以验证我是否正确,但是..
我发现最接近的东西是np.take
答案 0 :(得分:0)
对于(2,2)形状数组:
In [13]: arr = np.array([[1,2],[3,4]])
In [14]: arr
Out[14]:
array([[1, 2],
[3, 4]])
Python unpacking
仅在数组上进行迭代-在第一个维度“行”上:
In [15]: x, y = arr
In [16]: x,y
Out[16]: (array([1, 2]), array([3, 4]))
要解压缩列,我们可以转置数组,因此第二维为第一维。但是我认为列表理解更清晰:
In [17]: x, y = [arr[:,i] for i in range(2)]
In [18]: x,y
Out[18]: (array([1, 3]), array([2, 4]))
对于3d数组:
In [19]: arr = np.arange(1,13).reshape(2,2,3)
In [20]: arr
Out[20]:
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
在第一个维度上进行迭代的结果应该很明显-2个块或窗格。
您正确地获得了第二维。对于第三个,结果是3(2,2)个数组:
In [21]: x,y,z=[arr[:,:,i] for i in range(arr.shape[2])]
In [22]: x
Out[22]:
array([[ 1, 4],
[ 7, 10]])
In [23]: y
Out[23]:
array([[ 2, 5],
[ 8, 11]])
In [24]: z
Out[24]:
array([[ 3, 6],
[ 9, 12]])
x,y,z=
也可以使用:
In [25]: arr.transpose(2,0,1)
Out[25]:
array([[[ 1, 4],
[ 7, 10]],
[[ 2, 5],
[ 8, 11]],
[[ 3, 6],
[ 9, 12]]])
np.take
可以像我的索引一样使用:
[np.take(arr,i,2) for i in range(3)]