变化数组形态
1.组合数组
使用 hstack 函数实现数组横向组合:np.hstack((arr1,arr2))
使用 vstack 函数实现数组纵向组合:np.vstack( (arr1,arr2) )
使用 concatenate 函数实现数组横向组合:np.concatenate( (arr1,arr2), axis = 1) )
使用 concatenate 函数实现数组纵向组合:np.concatenate( (arr1,arr2), axis = 0) )
2.切割数组
使用 hsplit 函数实现数组横向分割: np.hsplit (arr1, 2)
使用 vsplit 函数实现数组纵向分割: np.vsplit(arr, 2)
使用 split 函数实现数组横向分割: np.split (arr, 2, axis=1)
使用 split 函数实现数组纵向分割: np.split (arr, 2, axis=0)
(1)数组转换操作
import numpy as np
# 生成一维数组
arr = np.arange(12)
print(arr)
# 结果: [0 1 2 3 4 5 6 7 8 9 10 11]
# 转换为二维数组
arr2 = arr.reshape(3,4) # 3行4列
print(arr2)
# 结果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
(2)二维展平为一维
import numpy as np
arr = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
print(arr)
# 结果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# 方法一: ravel
print('展平后的数组为: ',arr.ravel()) # 横向展平
# 结果: [ 0 1 2 3 4 5 6 7 8 9 10 11]
# 方法二: flatten
print('展平后的数组为: ',arr.flatten()) # 默认为C,表示横向展平
# 结果: [ 0 1 2 3 4 5 6 7 8 9 10 11]
print('展平后的数组为: ',arr.flatten('F')) # 'F',表示纵向展平
# 结果: [ 0 4 8 1 5 9 2 6 10 3 7 11]
(3)数组组合方式
方法一: 横向拼接hstack((数组a,数组b)); 纵向拼接vstack((数组a,数组b))
import numpy as np
arr3 = np.arange(12).reshape(3,4)
print(arr3)
# 结果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
arr4 = 4*arr3
print(arr4)
# 结果:
# [[ 0 4 8 12]
# [16 20 24 28]
# [32 36 40 44]]
print('横向拼接: ',np.hstack((arr3,arr4)))
# 结果:
# [[ 0 1 2 3 0 4 8 12]
# [ 4 5 6 7 16 20 24 28]
# [ 8 9 10 11 32 36 40 44]]
print('纵向拼接: ',np.vstack((arr3,arr4)))
# 结果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [ 0 4 8 12]
# [16 20 24 28]
# [32 36 40 44]]
方法二: concatenate
axis = 1表示横坐标,横向变化; axis = 0表示纵坐标,纵向变化
import numpy as np
arr3 = np.arange(12).reshape(3,4)
print(arr3)
# 结果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
arr4 = 4*arr3
# print(arr4)
# 结果:
# [[ 0 4 8 12]
# [16 20 24 28]
# [32 36 40 44]]
con = np.concatenate((arr3,arr4),axis = 1)
print(con)
# 结果:
# [[ 0 1 2 3 0 4 8 12]
# [ 4 5 6 7 16 20 24 28]
# [ 8 9 10 11 32 36 40 44]]
con2 = np.concatenate((arr3,arr4),axis = 0)
print(con2)
# 结果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [ 0 4 8 12]
# [16 20 24 28]
# [32 36 40 44]]
(4)数组分割方式
方法一: 横向分割hsplit(数组,列数); 纵向分割vsplit(数组,行数)
注意: 横向分割是列数在变化; 纵向分割是行数在变化
import numpy as np
arr5 = np.arange(16).reshape(4,4)
# print(arr5)
# 结果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
print('横向分割: ',np.hsplit(arr5,2))
# 结果:
# [array([[ 0, 1],
# [ 4, 5],
# [ 8, 9],
# [12, 13]]), array([[ 2, 3],
# [ 6, 7],
# [10, 11],
# [14, 15]])]
print('纵向分割: ',np.vsplit(arr5,2))
# 结果:
# [array([[0, 1, 2, 3],
# [4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
# [12, 13, 14, 15]])]
方法二: 横向分割split(数组,列数,axis=1); 纵向分割split(数组,行数,axis=0);
axis = 1表示横坐标,横向变化; axis = 0表示纵坐标,纵向变化
注意: 横向分割是列数在变化; 纵向分割是行数在变化
import numpy as np
arr5 = np.arange(16).reshape(4,4)
# print(arr5)
# 结果:
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [12 13 14 15]]
print('横向分割: ',np.split(arr5,2,axis=1))
# 结果:
# [array([[ 0, 1],
# [ 4, 5],
# [ 8, 9],
# [12, 13]]), array([[ 2, 3],
# [ 6, 7],
# [10, 11],
# [14, 15]])]
print('纵向分割: ',np.split(arr5,2,axis=0))
# 结果:
# [array([[0, 1, 2, 3],
# [4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
# [12, 13, 14, 15]])]