Python库之numpy之数组切片

众所周知,python中有很多的库,numpy就是其中的一个库,做数据分析必备的库之一,
今天就让我们来学一下,numpy的切片

今天上课学这个切片切的我快自卑了,为啥为啥,脑子里全是为啥,为啥不是我想要的结果呢?后来花了半小时弄懂终于弄懂了,年轻人还是需要一些锲而不舍的精神的

首先让我们定义一个多维数组
方法一:
1:导入numpy

import numpy as np

2:定义一个数组(我发现用Spyder还是挺好用的,可以看到数据,不用输出)

D=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])

数组是这样的:(索引值从0开始索引)
在这里插入图片描述
切片开始,准备好了吗?
1:先让我们来切出第一行
切片原理:切片多维数组就是前面表示行,后面表示列,用中括号括起来(这个不多说,下面的代码解释)

A=D[1]
#这两条代码都能得到数组的第一行
A1=D[1,:]

在这里插入图片描述
2:切出第一列(若只有一维数据,则在Spyder里会以列的形式排列

B=D[:,1]

在这里插入图片描述
3:取出D中行为1,列为2的数据,注意下标是从0开始的、

B1=D[1,2]

在这里插入图片描述
4:访问第1,3列数据

B2=D[:,[1,3]]

在这里插入图片描述

5:访问第1,3行数据

B3=D[[1,3],:]

在这里插入图片描述
6:取D中满足第0列大于5的所有列数据(:表示所有的行或是是列)

C=D[D[:,0]]

在这里插入图片描述
7:取D中满足第0中大于5的第2,3列数据
按逻辑我们应该是这样写的:

C1=D[D[:,0]>5,[2,3]]

在这里插入图片描述
看看上面的数据,你发现了什么?他只取了两个数,是他出错了吗?我们需要的是两列呀,为什么会这样呢?
原因:在numpy中设置行与列同时都是有条件限制,且都为多个限制用【】隔开时,只取行列一一对应的值。
上面的数相当于:

C1=D[[2,3],[2,3]]

python中数组切片默认取值,第二行第二列下的元素与第三行第三列下的元素

那么如果我们想要取出:D中满足第0中大于5的第2,3列数据,怎么取呢?

C2=D[D[:,0]>5,2:4]

在这里插入图片描述
总结点:
1:在numpy中,【】表示一个限制符号,前后需要一一位置对应取值,若想去规定行列的全部元素而不是单个元素来取值则需要将行列数值范围限制放在同一个【】中
2:行列规范范围,取左不取右,C2=D[D[:,0]>5,2:4]中列限制范围2:4,只取到了2,3列第四列没取

8:取D中满足第0列大于5的第1,2列数据

C3=D[D[:,0]>5,1:3]

在这里插入图片描述
9:加入逻辑运算,计算出#取D中第0,3行的所有列数据,本质上行及控制为逻辑列表,去逻辑值为真

TF=[True,False,True,False]
D1=D[TF,:]

在这里插入图片描述

#取出第0,3行的2,3列的元素
Dt4=[D[TF,2:4]]

在这里插入图片描述

10:取出D中大于4的数据

Dt5=D[D>4]

在这里插入图片描述
总结:当数据没有特殊行或者列的规定时,取出来的值为行列平行,就为一列

11:取中间几个元素,6,7,10,11(可以直接取值)
可以借助切片 : 或 … 与索引数组组合。

middle=D[1:3,1:3]

在这里插入图片描述
方法二:
要是一开始就先看了这方法,那我也不至于想了那么久还是没想明白,推荐一直使用这个方法,因为这个方法不仅好用,而且符合我们大脑的逻辑。
1:首先还是需要导入包:

import numpy as np

2:定义数组

D=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])

在这里插入图片描述

3:取第1,2行,1,3列

D3=D[np.ix_([1,2],[1,3])]

在这里插入图片描述

4:取0,1行,1,3列

D4=D[np.ix_(np.arange(2),[1,3])]

在这里插入图片描述

5:取第一列小于11,列数为1,2行的所有元素

D6=D[np.ix_(D[:,1]<11,[1,2])]

在这里插入图片描述

6:取第一列小于11,列数为2行的所有元素

D7=D[np.ix_(D[:,1]<11,[2])]

在这里插入图片描述

8:取TF逻辑列表中的第二列

TF=[True,False,False,True]
D8=D[np.ix_(TF,[2])]

在这里插入图片描述

9:取TF逻辑列表中的,1,3列

D9=D[np.ix_(TF,[1,3])]

在这里插入图片描述
总结:
1:在没用.ix_(),取值的时候需要考虑取左不去右,用了之后【【1:3】,【1:4】】所涉及的列全取。而没用的时候只取1,2行,1,2,3列。
2:ix_():设置行列范围不在是去一一对应的值,而是行列所涉及的所有值

希望这篇文章对你有用,有问题评论区见。
生活明朗,万物可爱!!!!

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
PythonNumPy库中,数组切片是指从给定的数组中选择出特定的元素子集。通过使用切片操作符[:],我们可以指定要选择的元素的范围。例如,对于一个二维数组D,如果我们想要选择第一行和第二列的元素,可以使用如下的切片操作:D[0, 1]。这样就可以选择出数组D中第一行第二列的元素。同样地,我们也可以选择出多个元素,比如选择第一行的前两个元素,可以使用切片操作:D[0, :2]。这样就可以选择出数组D中第一行的前两个元素。 需要注意的是,Python中的索引是从0开始的,所以第一行可以用索引0来表示。此外,切片操作还支持负数索引,表示从数组的末尾开始计数。例如,如果我们想要选择最后一行的最后两个元素,可以使用切片操作:D[-1, -2:]。这样就可以选择出数组D中最后一行的最后两个元素。 总之,使用NumPy库中的切片操作,我们可以轻松地选择出数组中的特定元素子集,以便进行进一步的处理和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python库numpy数组切片](https://blog.csdn.net/qq_45656077/article/details/116167288)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [pythonNumpy数组基础结构](https://download.csdn.net/download/weixin_38711041/14854010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Recently 祝祝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值