Numpy学习笔记006
目录
八、数组的形状操作
1. reshape
和 resize
1.1 reshape
方法
将数组转换成指定的形状,然后返回转换后的结果,对于原数组的形状是不会发生改变的。
ndarray.reshape((m,n,o))
含义 :有三个参数,说明ndarray转换后是三维数组,第一个参数m表示的是三维数组中有m个元素,就是有m个二维数组,后两个参数 n,o 分别表示的二维数组的行数和列数。例如a.reshape((2,3,3))就是把a数组转换为一个由两个3X3的二维数组组成的三维数组。
import numpy as np
a1 = np.random.randint(1,10,size=(3,6))
print(a1)
print('-'* 20)
a2 = a1.reshape((2,9)) #修改后的数组数量要和原数组数量一致
print(a2)
print('-'* 20)
a3 = a1.reshape((3,3,2)) #变成一个3维数组,总共有3块(第一个参数决定),每一块是3行2列的(三维数组中数的数量要和一维数组中数的数量要一致)
print(a3)
print('-'* 20)
a4 = a1.reshape((2,3,3)) #变成一个3维数组,总共有2块,每一块是3行3列的
print(a4)
print('-'*20)
a5 = a1.reshape((3,2,3)) #变成一个3维数组,总共有3块,每一块是2行3列的
print(a5)
[[4 8 5 9 5 8]
[9 7 2 2 6 9]
[8 4 4 2 8 5]]
--------------------
[[4 8 5 9 5 8 9 7 2]
[2 6 9 8 4 4 2 8 5]]
--------------------
[[[4 8]
[5 9]
[5 8]]
[[9 7]
[2 2]
[6 9]]
[[8 4]
[4 2]
[8 5]]]
--------------------
[[[4 8 5]
[9 5 8]
[9 7 2]]
[[2 6 9]
[8 4 4]
[2 8 5]]]
--------------------
[[[4 8 5]
[9 5 8]]
[[9 7 2]
[2 6 9]]
[[8 4 4]
[2 8 5]]]
1.2 resize
方法
将数组转换成指定的形状,会直接修改数组本身,但不会返回任何值。
import numpy as np
b1 = np.random.randint(0,10,size=(3,4))
print(b1)
print("="*20)
b2 = b1.resize((2,6))
print(b2) # None没有返回值
print("="*20)
print(b1) # 打印已经改变的数组形状
[[4 4 3 7]
[8 7 6 8]
[5 2 6 9]]
====================
None
====================
[[4 4 3 7 8 7]
[6 8 5 2 6 9]]
2. flatten
和ravel
2.1 flatten
方法
将数组转换为一维数组后,然后将这个拷贝返回回去,变量名和变量指向的存储位置都已经改变了,所以后续对这个返回值进行修改不会影响之前的数组。(深拷贝)
import numpy as np
c1 = np.random.randint(1,10,size=(3,3))
print(c1)
print('-'*20)
c2 = c1.flatten()
print(c2) #一维数组
print('-'*20)
#对返回值c2进行修改,观察到c1未改变
c2[0] = 100
print