堆栈和重塑 Numpy 数组
Stack and reshape Numpy array
给定一个 4 二维数组如下
import numpy as np
t1=np.array([[0,0,1],[0,0,1],[1,1,0]])
t2=np.array([[0,1,0],[1,0,1],[0,1,0]])
t3=np.array([[0,0,1],[0,0,0],[1,0,0]])
t4=np.array([[0,1,1],[1,0,1],[1,1,0]])
我可以知道如何组合和重塑它以获得如下输出
[[[0. 0. 0. 0.]
[0. 1. 0. 1.]
[1. 0. 1. 1.]]
[[0. 1. 0. 1.]
[0. 0. 0. 0.]
[1. 1. 0. 1.]]
[[1. 0. 1. 1.]
[1. 1. 0. 1.]
[0. 0. 0. 0.]]]
print(np.array([t1,t2,t3,t4]).T)
In [1]: import numpy as np
In [2]: t1=np.array([[0,0,1],[0,0,1],[1,1,0]])
...: t2=np.array([[0,1,0],[1,0,1],[0,1,0]])
...: t3=np.array([[0,0,1],[0,0,0],[1,0,0]])
...: t4=np.array([[0,1,1],[1,0,1],[1,1,0]])
In [3]: np.array((t1, t2, t3, t4)).T
Out[3]:
array([[[0, 0, 0, 0],
[0, 1, 0, 1],
[1, 0, 1, 1]],
[[0, 1, 0, 1],
[0, 0, 0, 0],
[1, 1, 0, 1]],
[[1, 0, 1, 1],
[1, 1, 0, 1],
[0, 0, 0, 0]]])
.T
等同于transpose
函数。
In [66]: t1=np.array([[0,0,1],[0,0,1],[1,1,0]])
...: t2=np.array([[0,1,0],[1,0,1],[0,1,0]])
...: t3=np.array([[0,0,1],[0,0,0],[1,0,0]])
...: t4=np.array([[0,1,1],[1,0,1],[1,1,0]])
In [67]: t1.shape
Out[67]: (3, 3)
In [68]: np.stack((t1,t2,t3,t4),axis=2)
Out[68]:
array([[[0, 0, 0, 0],
[0, 1, 0, 1],
[1, 0, 1, 1]],
[[0, 1, 0, 1],
[0, 0, 0, 0],
[1, 1, 0, 1]],
[[1, 0, 1, 1],
[1, 1, 0, 1],
[0, 0, 0, 0]]])
数组的转置(也 np.stack((), axis=0)
)产生相同的结果,但这只是因为每个 (3,3) 数组都是对称的。
In [70]: np.array((t1,t2,t3,t4))
Out[70]:
array([[[0, 0, 1],
[0, 0, 1],
[1, 1, 0]],
[[0, 1, 0],
[1, 0, 1],
[0, 1, 0]],
[[0, 0, 1],
[0, 0, 0],
[1, 0, 0]],
[[0, 1, 1],
[1, 0, 1],
[1, 1, 0]]])
给定一个 4 二维数组如下
import numpy as np
t1=np.array([[0,0,1],[0,0,1],[1,1,0]])
t2=np.array([[0,1,0],[1,0,1],[0,1,0]])
t3=np.array([[0,0,1],[0,0,0],[1,0,0]])
t4=np.array([[0,1,1],[1,0,1],[1,1,0]])
我可以知道如何组合和重塑它以获得如下输出
[[[0. 0. 0. 0.]
[0. 1. 0. 1.]
[1. 0. 1. 1.]]
[[0. 1. 0. 1.]
[0. 0. 0. 0.]
[1. 1. 0. 1.]]
[[1. 0. 1. 1.]
[1. 1. 0. 1.]
[0. 0. 0. 0.]]]
print(np.array([t1,t2,t3,t4]).T)
In [1]: import numpy as np
In [2]: t1=np.array([[0,0,1],[0,0,1],[1,1,0]])
...: t2=np.array([[0,1,0],[1,0,1],[0,1,0]])
...: t3=np.array([[0,0,1],[0,0,0],[1,0,0]])
...: t4=np.array([[0,1,1],[1,0,1],[1,1,0]])
In [3]: np.array((t1, t2, t3, t4)).T
Out[3]:
array([[[0, 0, 0, 0],
[0, 1, 0, 1],
[1, 0, 1, 1]],
[[0, 1, 0, 1],
[0, 0, 0, 0],
[1, 1, 0, 1]],
[[1, 0, 1, 1],
[1, 1, 0, 1],
[0, 0, 0, 0]]])
.T
等同于transpose
函数。
In [66]: t1=np.array([[0,0,1],[0,0,1],[1,1,0]])
...: t2=np.array([[0,1,0],[1,0,1],[0,1,0]])
...: t3=np.array([[0,0,1],[0,0,0],[1,0,0]])
...: t4=np.array([[0,1,1],[1,0,1],[1,1,0]])
In [67]: t1.shape
Out[67]: (3, 3)
In [68]: np.stack((t1,t2,t3,t4),axis=2)
Out[68]:
array([[[0, 0, 0, 0],
[0, 1, 0, 1],
[1, 0, 1, 1]],
[[0, 1, 0, 1],
[0, 0, 0, 0],
[1, 1, 0, 1]],
[[1, 0, 1, 1],
[1, 1, 0, 1],
[0, 0, 0, 0]]])
数组的转置(也 np.stack((), axis=0)
)产生相同的结果,但这只是因为每个 (3,3) 数组都是对称的。
In [70]: np.array((t1,t2,t3,t4))
Out[70]:
array([[[0, 0, 1],
[0, 0, 1],
[1, 1, 0]],
[[0, 1, 0],
[1, 0, 1],
[0, 1, 0]],
[[0, 0, 1],
[0, 0, 0],
[1, 0, 0]],
[[0, 1, 1],
[1, 0, 1],
[1, 1, 0]]])