吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2970|回复: 7
收起左侧

[Python 转载] 【笔记】python数据分析——变换与编程中的轴

[复制链接]
qianshang666 发表于 2021-3-4 20:26
本帖最后由 qianshang666 于 2021-3-4 22:37 编辑

往期数据分析笔记

【笔记】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二维数组的轴.png
上图是我找来的一张轴的示意图,我相信大家看了图理解还是挺容易的
当然了,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里面直接放数字,不需要放元组

今日鸡汤

有人在奔跑,有人在睡觉,有人在感恩,有人在抱怨,有目标的睡不着,没目标的人睡不醒,努力才是人生应有的态度,睁开眼就是新的开始。

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
geek_007 + 1 + 1 谢谢@Thanks!
河洲雎鸠 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hobor 发表于 2021-3-4 21:05
谢谢楼主分享
 楼主| qianshang666 发表于 2021-3-4 21:05
基本上这个笔记就是零基础了,有些数学上的东西我都用我的理解解释了,有兴趣的朋友可以跟着笔记学习,每天进步一点点
geek_007 发表于 2021-3-4 21:29
weyjl1 发表于 2021-3-4 22:02
学习中,谢谢分享
daochukankan 发表于 2021-3-4 22:27
学习学习,谢谢楼主
hyfxiangnian 发表于 2021-4-15 16:16
arr6 = np.arange(12).shape(2,2,3),这里应该写错了,应该是reshape

对于swapaxes应该是2个参数传参,具体用法还没看,楼主这是自己写错了???
 楼主| qianshang666 发表于 2021-4-15 16:20
hyfxiangnian 发表于 2021-4-15 16:16
arr6 = np.arange(12).shape(2,2,3),这里应该写错了,应该是reshape

对于swapaxes应该是2个参数传参, ...

当时写笔记是根据记忆写的,有些错误没注意到,抱歉呀
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表