概述
在numpy中,修改数组形状,是指 将 n 行 m 列 的数组改成 i 行 j 列,n * m必须等于i * j,否则报错
ndarray.reshape()方法
ndarray对象的reshape()方法,可以改变当前对象的数组形状
语法
ndarray.reshape(size)
参数说明:
- size:形状,tuple类型,表示改成m行n列数组
将1维数组改成2维数组
import numpy as np
arr=np.array([1,2,3,4])
arr2=arr.reshape((2,2))
print('arr:',arr)
print('arr2:',arr2)
执行结果:
arr: [1 2 3 4]
arr2: [[1 2]
[3 4]]
注意:
转变后的 i 行 j 列 数组,i*j必须等于 原数组的 元素总数,否则报错
错误例子
将3行4列数组,改成2行2列
import numpy as np
arr=np.random.randint(1,10,(3,4))
arr2=arr.reshape((2,2))
print('arr:',arr)
print('arr2:',arr2)
执行结果:
ValueError: cannot reshape array of size 12 into shape (2,2)
因为原数组3行4列共12个元素,转换成2行2列共4个元素的数组,元素无法匹配上,所以无法转换
将1维数组改成3维数组
arr=np.arange(24)
arr2=arr.reshape(2,3,4)
print('arr:',arr)
print('arr形状:',arr.shape)
print('arr2:',arr2)
print('arr2形状:',arr2.shape)
执行结果:
arr: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
arr形状: (24,)
arr2: [[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
arr2形状: (2, 3, 4)
原数组是一维数组共24个元素,修改成3维数组,3维数组比较抽象,可以理解成2个3行4列的数组,其元素个数也是24个,与原数组的元素个数匹配,所以能够正常转换
将2维数组转换成1维数组
arr=np.random.randint(1,10,(3,4))
arr2=arr.reshape(12)
print('arr:',arr)
print('arr形状:',arr.shape)
print('arr2:',arr2)
print('arr2形状:',arr2.shape)
执行结果:
arr: [[1 7 1 4]
[8 1 1 2]
[5 2 1 9]]
arr形状: (3, 4)
arr2: [1 7 1 4 8 1 1 2 5 2 1 9]
arr2形状: (12,)
注意:
一维数组的形状是 (n,),只有一个数,第二个数也不能是0,否则报错
形状(n,1)表示n行1列
arr=np.random.randint(1,10,(3,4))
arr2=arr.reshape(12,1)
print('arr:',arr)
print('arr形状:',arr.shape)
print('arr2:',arr2)
print('arr2形状:',arr2.shape)
执行结果是:
arr: [[7 9 4 7]
[8 6 8 4]
[4 2 4 7]]
arr形状: (3, 4)
arr2: [[7]
[9]
[4]
[7]
[8]
[6]
[8]
[4]
[4]
[2]
[4]
[7]]
arr2形状: (12, 1)
ndarray.flatten()方法
将n维数组转换成1维数组的简单方法
arr=np.random.randint(1,10,(3,4))
arr2=arr.flatten()
print('arr:',arr)
print('arr形状:',arr.shape)
print('arr2:',arr2)
print('arr2形状:',arr2.shape)
执行结果:
arr: [[2 7 1 4]
[1 4 2 3]
[5 9 2 2]]
arr形状: (3, 4)
arr2: [2 7 1 4 1 4 2 3 5 9 2 2]
arr2形状: (12,)
numpy.reshape()函数
注意:这不是ndarray对象的reshape()方法
这是numpy的函数,改变数组形状
语法
numpy.reshape(a, newshape)
参数说明:
- a:类似数组的类型,如:list、tuple、ndarray
- newshape:形状,tuple类型,表示改成m行n列数组
返回值:
- 修改形状后的ndarray对象
注意:
原数组没有发送变化
例子:
将2行6列的list转换成3行4列的ndarray数组
import numpy as np
l=[[1,2,3,4,5,6],[3,4,5,6,7,8]]
arr=np.reshape(l,(3,4))
print('l',l)
print('arr:',arr)
执行结果:
l [[1, 2, 3, 4, 5, 6], [3, 4, 5, 6, 7, 8]]
arr: [[1 2 3 4 5 6]
[3 4 5 6 7 8]]