reshape() 重塑, flatten()/reval() 扁平化
reshape()——>完成从低维到高维的转换
flatten()——>完成从高维到低维的转换 同时可以用ravel()实现
a. 基础用法举例
import numpy as np
help(np.ravel)
ravel(a, order=‘C’)
Return a contiguous flattened array.
a : array_like
Input array. The elements in a
are read in the order specified by
order
, and packed as a 1-D array.
order : {‘C’,‘F’, ‘A’, ‘K’}, optional
用reshape()创建二维数组arr
arr=np.arange(1,25.0).reshape((4,-1)) #tips:用-1直接计算另一个参数
array([[ 1., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.],
[13., 14., 15., 16., 17., 18.],
[19., 20., 21., 22., 23., 24.]])
对其进行进行扁平化(打平):
arr_=arr.flatten()
arr_2=arr.ravel()
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.])
b. ravel和flatten的区别
raval()进行扁平化处理时没有复制原来数组,只在列主序打平时复制了原数组,返回的是一个数组的视图。
faltten()在所有情况下打平时都复制了原来的数组,分配了新的内存。
#flatten打平的情况下
arr_[0] = 50
print(arr_)
print(arr)
array([ 50., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.])
array([[ 1., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.],
[13., 14., 15., 16., 17., 18.],
[19., 20., 21., 22., 23., 24.]])
flatten()不会影响到原本数组arr
#ravel打平情况下
arr_2[0] = 100
print(arr_2)
print(arr)
array([ 100., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11., 12., 13.,
14., 15., 16., 17., 18., 19., 20., 21., 22., 23., 24.])
array([[ 100., 2., 3., 4., 5., 6.],
[ 7., 8., 9., 10., 11., 12.],
[13., 14., 15., 16., 17., 18.],
[19., 20., 21., 22., 23., 24.]])
ravel()会影响到原本数组arr
尽量使用flatten()函数打平数组。