往期数据分析笔记
【笔记】python数据分析——numpy初识1
【笔记】python数据分析——numpy初识2
变换与编程中的轴
这节课包含的内容:
数组重塑
数组合并
数组拆分
数组转置和轴变换
数组重塑
import numpy as np
data1 = [[1,2,3,4],[5,6,7,8]]
arr1 = np.array(data1)
print(arr1)
我们依旧先创建一个numpy数组
然后我们查看一下这个numpy数组的shape属性
print(arr1.shape)
运行结果:(2,4) 也就是两行四列
接下来我们就对这个数组进行重塑
- reshape方法
print(arr1.reshape((4,2)))
运行结果:
[[1 2]
[3 4]
[5 6]
[7 8]]
这样就将数组重塑成为了四行两列
注意:reshape方法里面放的是一个元组
注意:重塑前后的行列数相乘的值必须相同
- ravel方法
print(arr1.ravel())
运行结果:[1 2 3 4 5 6 7 8]
降维打击,用这个函数重塑数组,无论是几维都转换为一维数组
- flatten方法
print(arr1.flatten())
运行结果:[1 2 3 4 5 6 7 8]
这个方法和ravel方法作用相同,都是将数组转换为一维数组
数组合并
创建第一个数组
data1=[[1,2,3,4],[5,6,7,8]]
arr1=np.array(data1)
print(arr1)
创建第二个数组
data2=[[2,3,4,5],[6,7,8,9]]
arr2=np.array(data2)
print(arr2)
使用concatenate将上面的两个数组进行合并
arr3 = np.concatenate([arr1,arr2],axis = 0)
print(arr3)
arr4 = np.concatenate([arr1,arr2],axis = 1)
print(arr4)
运行结果:
[[1 2 3 4]
[5 6 7 8]
[2 3 4 5]
[6 7 8 9]]
[[1 2 3 4 2 3 4 5]
[5 6 7 8 6 7 8 9]]
concatenate有两个参数,第一个参数是将要合并的数组放在一个列表中,第二个参数axis是轴,大家可以看到上面的运行结果axis=0时,它是纵向合并,而axis=1时,它是横向合并的
上图是我找来的一张轴的示意图,我相信大家看了图理解还是挺容易的
当然了,numpy中还提供了两个方法
print(np.vstack(arr1,arr2))
print(np.hstack(arr1,arr2))
vstack相当于axis=0
hstack相当于axis=1
数组拆分
arr4 = np.arange(12).reshape((6,2))
print(arr4)
运行结果:
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]
上面的代码我们先使用arange创建0~11的数组,然后再重塑成六行两列的数组
我们进行数组拆分的时候使用split
print(np.split(arr4,3,axis = 0))
print(np.split(arr4,2,axis = 1))
运行结果:
[array([[0, 1],
[2, 3]]), array([[4, 5],
[6, 7]]), array([[ 8, 9],
[10, 11]])]
[array([[ 0],
[ 2],
[ 4],
[ 6],
[ 8],
[10]]), array([[ 1],
[ 3],
[ 5],
[ 7],
[ 9],
[11]])]
注意:spilt的参数:切分的数组,要切分为几块(一定要能整除才能切分),对上面重塑的六行两列的数组进行轴的切分方式(0是水平切分,1是立体切分)
数组的转置
转置的意思就是n行m列,变为m行n列
-
二维数组的转置
arr5 = np.arange(12).reshape((3,4))
print(arr5)
print(arr5.T)
运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
注意:如果只是单纯的二维数组的话,我们就可以直接使用(数组名.T)来修改
-
二维及二维以上转置
如果对于多维数组的话,我们就要用到transponse,这个里面要放一个元组,元组里面放轴的次序
print(arr5.transponse(0,1))
print(arr5.transponse(1,0))
运行结果:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
也就是说第一行代码就是它原来的轴位置,第二行我改变了轴的顺序,自然就实现了转置
-
三维起步转置
arr6 = np.arange(12).shape(2,2,3)
print(arr6)
运行结果:
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
上面的代码意思是我创建了一个三维的数组
print(arr6.swapaxes(0,1,2))
运行结果:
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
swapaxes(0,1,2)就是三维数组正常的轴的顺序
如果我们要对其进行转置的话
print(arr6.awapaxes(2,1))
运行结果:
[[[ 0 3]
[ 1 4]
[ 2 5]]
[[ 6 9]
[ 7 10]
[ 8 11]]]
这个代码意思就是2轴放在0轴的位置上,1轴不变,0轴就自动放在了最后面2轴的位置
注意:awapaxes里面直接放数字,不需要放元组
今日鸡汤
有人在奔跑,有人在睡觉,有人在感恩,有人在抱怨,有目标的睡不着,没目标的人睡不醒,努力才是人生应有的态度,睁开眼就是新的开始。