python数据分析(3)——numpy数组形状转换.T/.reshape()/.resize()

numpy数组形状转换:
1.转置函数.T,将原shape为(n,m)的数组转置为(m,n),一维数组转置不变
首先创建两个数组:

ar1=np.arange(10)
ar2=np.zeros((2,5))
print(ar1)
print(ar2)
[0 1 2 3 4 5 6 7 8 9]
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

分别进行转置:

print(ar1.T)
print(ar2.T)
[0 1 2 3 4 5 6 7 8 9]
[[0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]
 [0. 0.]]

<<补充:numpy.zeros()方法:创建数组,并全部用0填充,类似的还有numpy.ones(),全部用1填充>>

2.reshape()方法:原数组size不变的前提下,改变原数组的形状,例如原shape(4,4)可以转置为(2,8),调用方法如下:

(1)数组+.reshape():

ar2=np.zeros((16))
print(ar2)
print(ar2.reshape(4,4))
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
 print(ar2.reshape(2,8))
[[0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0.]]

(2)也可以直接在括号内调用:

print(np.zeros(16).reshape(4,4))
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

(3)或者调用numpy.reshape()函数:

print(np.reshape(np.arange(16),(4,4)))
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

3..resize()方法:与reshape()不同在于可以改变数组的size,例如原数组shape(4,)可以变成(3,4),如下所示:

print(np.resize(np.arange(4),(3,4)))
[[0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]]

可以看出:目标数组shape为(3,4),3*4是12个元素,原数组只有4个,.resize()函数会默认将原数组进行排序,来填充目标数组

同时如果原数组元素个数多了,会截取目标数组size的部分:

print(np.resize(np.arange(14),(3,4)))
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

值得注意的是这三个函数都是在原有的数组基础上生成新的数组,原数组并不改变
<<补充:数组的复制:.copy()对数组进行复制,原数组的改变,不会影响复制的数组,如下所示:

ar1=np.arange(10)
ar2=ar1.copy()
ar1[2]=100
print(ar1,ar2)
[  0   1 100   3   4   5   6   7   8   9] [0 1 2 3 4 5 6 7 8 9]

ar1改变,ar2不变,.T/.reshape()/.resize()方法默认都是有copy,即生成新的数组,不改变原数组。

你可能感兴趣的:(python)