numpy的操作(二)
一、数组的变化
1、变换数组的形态(一维转二维)
# 创建一维数组
arr = np.arange(12)
# print(arr)
# 一维转二维
arr2 = arr.reshape(3,4)
print(arr2)
print(arr2.ndim)
#[ 0 1 2 3 4 5 6 7 8 9 10 11]
#1
#[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
#2
2、展平数组(二维转一维)
(1)ravel(),横向展平
print(arr2.ravel())
print(arr2.ravel().ndim)
#[ 0 1 2 3 4 5 6 7 8 9 10 11]
#1
(2)flatten(),与ravel的区别是flatten可以选择横向展平或纵向展平
print(arr2.flatten())#默认为‘C',表示按行展平
print(arr2.flatten('F'))#按列展平 传一个参数F
#[ 0 1 2 3 4 5 6 7 8 9 10 11]
#[ 0 4 8 1 5 9 2 6 10 3 7 11]
3、组合
numpy 可以对数组进行组合 组合方式也是横向组合与纵向组合
(1)方法一
①np.hstack((数组1,数组2))
arr3 = arr2*3
print(np.hstack((arr2,arr3)))#横向组合
#[[ 0 1 2 3 0 3 6 9]
# [ 4 5 6 7 12 15 18 21]
# [ 8 9 10 11 24 27 30 33]]
②np.vstack((数组1,数组2))
print(np.vstack((arr2,arr3)))#纵向组合
#[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [ 0 3 6 9]
# [12 15 18 21]
# [24 27 30 33]]
(2)方法二:np.concatenate((数组1,数组2),axis=?)
print(np.concatenate((arr2,arr3),axis=1))#axis 坐标 只用0,1两种参数 1表示按行 0表示按列
#[[ 0 1 2 3 0 3 6 9]
# [ 4 5 6 7 12 15 18 21]
# [ 8 9 10 11 24 27 30 33]]
print(np.concatenate((arr2,arr3),axis=0))#axis 坐标 只用0,1两种参数 1表示按行 0表示按列
#[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]
# [ 0 3 6 9]
# [12 15 18 21]
# [24 27 30 33]]
4、数组的分割
(1)方法一
①横向分割
print(np.hsplit(arr2,2))#横向切割,等分
#[array([[0, 1],
# [4, 5],
# [8, 9]]), array([[ 2, 3],
# [ 6, 7],
# [10, 11]])]
②纵向分割
print(np.vsplit(arr2,3))#纵向切割,等分
#[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])]
(2)方法二:split(数组,个数,axis=?)
print(np.split(arr2,2,axis=1))
#[array([[0, 1],
# [4, 5],
# [8, 9]]), array([[ 2, 3],
# [ 6, 7],
# [10, 11]])]