【笔记】python数据分析——变换与编程中的轴
本帖最后由 qianshang666 于 2021-3-4 22:37 编辑## 往期数据分析笔记
[【笔记】python数据分析——numpy初识1](https://www.52pojie.cn/thread-1381772-1-1.html)
[【笔记】python数据分析——numpy初识2](https://www.52pojie.cn/thread-1382691-1-1.html)
## 变换与编程中的轴
这节课包含的内容:
数组重塑
数组合并
数组拆分
数组转置和轴变换
### 数组重塑
```
import numpy as np
data1 = [,]
arr1= np.array(data1)
print(arr1)
```
我们依旧先创建一个numpy数组
然后我们查看一下这个numpy数组的shape属性
```
print(arr1.shape)
```
运行结果:(2,4) 也就是两行四列
接下来我们就对这个数组进行重塑
- reshape方法
```
print(arr1.reshape((4,2)))
```
运行结果:
[
]
这样就将数组重塑成为了四行两列
**注意:reshape方法里面放的是一个元组**
**注意:重塑前后的行列数相乘的值必须相同**
- ravel方法
```
print(arr1.ravel())
```
运行结果:
降维打击,用这个函数重塑数组,无论是几维都转换为一维数组
- flatten方法
```
print(arr1.flatten())
```
运行结果:
这个方法和ravel方法作用相同,都是将数组转换为一维数组
### 数组合并
创建第一个数组
```
data1=[,]
arr1=np.array(data1)
print(arr1)
```
创建第二个数组
```
data2=[,]
arr2=np.array(data2)
print(arr2)
```
使用concatenate将上面的两个数组进行合并
```
arr3 = np.concatenate(,axis = 0)
print(arr3)
arr4 = np.concatenate(,axis = 1)
print(arr4)
```
运行结果:
[
]
[
]
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)
```
运行结果:
[[ 01]
[ 23]
[ 45]
[ 67]
[ 89]
]
上面的代码我们先使用arange创建0~11的数组,然后再重塑成六行两列的数组
我们进行数组拆分的时候使用split
```
print(np.split(arr4,3,axis = 0))
print(np.split(arr4,2,axis = 1))
```
运行结果:
,
]), array([,
]), array([[ 8,9],
])]
,
[ 2],
[ 4],
[ 6],
[ 8],
]), array([[ 1],
[ 3],
[ 5],
[ 7],
[ 9],
])]
**注意:spilt的参数:切分的数组,要切分为几块(一定要能整除才能切分),对上面重塑的六行两列的数组进行轴的切分方式(0是水平切分,1是立体切分)**
### 数组的转置
转置的意思就是n行m列,变为m行n列
- 二维数组的转置
```
arr5 = np.arange(12).reshape((3,4))
print(arr5)
print(arr5.T)
```
运行结果:
[[ 0123]
[ 4567]
[ 89 10 11]]
[[ 048]
[ 159]
[ 26 10]
[ 37 11]]
** 注意:如果只是单纯的二维数组的话,我们就可以直接使用(数组名.T)来修改**
- 二维及二维以上转置
如果对于多维数组的话,我们就要用到transponse,这个里面要放一个元组,元组里面放轴的次序
```
print(arr5.transponse(0,1))
print(arr5.transponse(1,0))
```
运行结果:
[[ 0123]
[ 4567]
[ 89 10 11]]
[[ 048]
[ 159]
[ 26 10]
[ 37 11]]
也就是说第一行代码就是它原来的轴位置,第二行我改变了轴的顺序,自然就实现了转置
- 三维起步转置
```
arr6 = np.arange(12).shape(2,2,3)
print(arr6)
```
运行结果:
[[[ 012]
[ 345]]
[[ 678]
[ 9 10 11]]]
上面的代码意思是我创建了一个三维的数组
```
print(arr6.swapaxes(0,1,2))
```
运行结果:
[[[ 012]
[ 345]]
[[ 678]
[ 9 10 11]]]
swapaxes(0,1,2)就是三维数组正常的轴的顺序
如果我们要对其进行转置的话
```
print(arr6.awapaxes(2,1))
```
运行结果:
[[[ 03]
[ 14]
[ 25]]
[[ 69]
[ 7 10]
[ 8 11]]]
这个代码意思就是2轴放在0轴的位置上,1轴不变,0轴就自动放在了最后面2轴的位置
注意:awapaxes里面直接放数字,不需要放元组
## 今日鸡汤
有人在奔跑,有人在睡觉,有人在感恩,有人在抱怨,有目标的睡不着,没目标的人睡不醒,努力才是人生应有的态度,睁开眼就是新的开始。 谢谢楼主分享 基本上这个笔记就是零基础了,有些数学上的东西我都用我的理解解释了,有兴趣的朋友可以跟着笔记学习,每天进步一点点{:301_998:} 谢谢楼主分享, 共同进步 学习中,谢谢分享 学习学习,谢谢楼主{:1_893:} arr6 = np.arange(12).shape(2,2,3),这里应该写错了,应该是reshape
对于swapaxes应该是2个参数传参,具体用法还没看,楼主这是自己写错了???
hyfxiangnian 发表于 2021-4-15 16:16
arr6 = np.arange(12).shape(2,2,3),这里应该写错了,应该是reshape
对于swapaxes应该是2个参数传参, ...
当时写笔记是根据记忆写的{:301_998:},有些错误没注意到,抱歉呀
页:
[1]