Numpy:np.vstack()&np.hstack() flat/flatten
一 . np.vstack: 按垂直方向(行顺序)堆叠数组构成一个新的数组
In[3]: import numpy as np In[4]: a = np.array([[1,2,3]]) a.shape Out[4]: (1, 3) In [5]: b = np.array([[4,5,6]]) b.shape Out[5]: (1, 3) In [6]: c = np.vstack((a,b)) # 将两个(1,3)形状的数组按垂直方向叠加 print(c) c.shape # 输出形状为(2,3) [[1 2 3] [4 5 6]] Out[6]: (2, 3) In [7]: a = np.array([[1],[2],[3]]) a.shape Out[7]: (3, 1) In [9]: b = np.array([[4],[5],[6]]) b.shape Out[9]: (3, 1) In [10]: c = np.vstack((a,b)) # 将两个(3,1)形状的数组按垂直方向叠加 print(c) c.shape # 输出形状为(6,1) [[1] [2] [3] [4] [5] [6]] Out[10]: (6, 1)
二 . np.hstack:按水平方向(列顺序)堆叠数组构成一个新的数组
In[11]: a = np.array([[1,2,3]]) a.shape Out[11]: (1, 3) In [12]: b = np.array([[4,5,6]]) b.shape Out[12]: (1, 3) In [16]: c = np.hstack((a,b)) # 将两个(1,3)形状的数组按水平方向叠加 print(c) c.shape # 输出形状为(1,6) [[1 2 3 4 5 6]] Out[16]: (1, 6) In [17]: a = np.array([[1],[2],[3]]) a.shape Out[17]: (3, 1) In [18]: b = np.array([[4],[5],[6]]) b.shape Out[18]: (3, 1) In [19]: c = np.hstack((a,b)) 将两个(3,1)形状的数组按水平方向叠加 print(c) c.shape # 输出形状为(3,2) [[1 4] [2 5] [3 6]] Out[19]: (3, 2)
三 . numpy.ndarray.flat/flatten
1. flat返回的是一个迭代器,可以用for访问数组每一个元素
import numpy as np a = np.arange(4).reshape(2,2) print(a) for i in a.flat: print(i) #迭代器可以用list进行输出 print(list(a.flat)) print(type(a.flat))#返回类型为 numpy.flatiter #可以用索引对迭代器进行引号 a.flat[3]
#输出:
[[0 1] [2 3]] 0 1 2 3 [0, 1, 2, 3] <class 'numpy.flatiter'> 3
2. ndarray.flatten(order=’C’)
Return a copy of the array collapsed into one dimension.
将数组的副本转换为一维,并返回
可选参数,order:{‘C’,‘F’,‘A’,‘K’}
- ‘C’:C-style,行序优先
- ‘F’:Fortran-style,列序优先
- ‘A’:if a is Fortran contiguous in memory ,flatten in column_major order
- ‘K’:按照元素在内存出现的顺序进行排序
默认为’C’
a = np.array([[4,5],[4,9]]) #默认按行转换 b= a.flatten() print(b) #换成列来划分 c = a.flatten('F') print(c)
[4 5 4 9]
[4 4 5 9]