在NumPy中ndarray.ndim可以返回这个数组的维数,等于秩(即轴的数量)。reshape()函数可以将数组变形重构,调整数组各维数的大小。
但是在使用reshape()时要注意数据量是否能转换成我们所需要的行列数。如16的话分成3行6列会报错。
reshape()常用的几种形式,以一下代码为例:
(1)转换成m行n列:reshape(m,n)
import numpy as np
arr = np.array([0,1,2,3,4,5,6,7])
#显示数组arr的秩
print('原秩为:',arr.ndim)
#使用reshape()改成2行4列
arr3D = arr.reshape(2,4)
print('改成2行4列为:',arr3D)
print('改成2行4列后的秩为:',arr3D.ndim)
#使用reshape()改成4行2列
print('改成4行2列为:',arr3D.reshape(4,2))
print('改成4行2列的秩为:',arr3D.ndim)
'''
输出结果为:
原秩为: 1
改成2行4列为: [[0 1 2 3]
[4 5 6 7]]
改成2行4列后的秩为: 2
改成4行2列为: [[0 1]
[2 3]
[4 5]
[6 7]]
改成4行2列的秩为: 2
'''
(2)转换成m行1列:reshape(m,-1)
import numpy as np
arr = np.array([0,1,2,3,4,5,6,7])
#显示数组arr的秩
print('原秩为:',arr.ndim)
#使用reshape()转换成8行1列
print(arr3D.reshape(8,-1))
print('改后的秩为:',arr3)
'''
输出结果为:
[[0]
[1]
[2]
[3]
[4]
[5]
[6]
[7]]
改后的秩为: 2
'''
(3)转换成1行n列:reshape(-1,n)
import numpy as np
arr = np.array([0,1,2,3,4,5,6,7])
#显示数组arr的秩
print('原秩为:',arr.ndim)
print('原数组:',arr)
#使用reshape()转换成1行8列
arr3D = arr.reshape(-1,8)
print('改后数组:',arr3D)
print('改后的秩为:',arr3D.ndim)
'''
输出结果:
原秩为: 1
原数组: [0 1 2 3 4 5 6 7]
改后数组: [[0 1 2 3 4 5 6 7]]
改后的秩为: 2
'''
reshape(-1,8)中的-1,是模糊控制,负数可以为任何数。这里是固定8列,多少行系统根据元素数量自动计算好。若出现了无法整除的情况,系统会报错。
(4)转换成2层2行2列:reshape(a,b,c),变成三维数组,因为输出的秩为3
import numpy as np
arr = np.array([0,1,2,3,4,5,6,7])
#显示数组arr的秩
print('原秩为:',arr.ndim)
print('原数组:',arr)
#使用reshape()转换成2层2行2列
arr3D = arr.reshape(2,2,2)
print('改后数组为:')
print(arr3D)
print('改后的秩为:',arr3D.ndim)
'''
原秩为: 1
原数组: [0 1 2 3 4 5 6 7]
改后数组为:
[[[0 1]
[2 3]]
[[4 5]
[6 7]]]
改后的秩为: 3
'''
未完持续补充中.....