查看原文
其他

Numpy获取数组中的元素,我总结了3类方法!

脚本之家 2022-05-10

The following article is from 数据分析与统计学之美 Author 黄伟呢

 关注
“脚本之家
”,与百万开发者在一起

文 | 黄伟呢

出品 | 数据分析与统计学之美(ID:huang_superme)

1. 本文介绍

前面我借着3个函数,为大家讲述了数组与列表的相互转化,数组的数据类型转化,以及如何改变ndarray数组的形状。今天黄同学就为大家介绍以下内容:
  • Ⅰ 普通索引+切片;
  • Ⅱ 通过整数数组进行索引(这个比较有用);
  • Ⅲ 通过布尔数组进行索引;

2. 普通索引+切片

这里构造一个数组:
a = np.arange(1,13,1).reshape(3,4)
print(a)
结果如下:
获取某一个元素,有如下两种方式:
a[1][2]
a[1,2]
结果如下:
获取某一行元素,也有如下两种方式:
a[1])
a[1,:]
结果如下:
获取某一列元素:
a[:,1]
结果如下:

3. 通过整数数组进行索引

  • 当要选取的元素不连续时,可以提供一个索引数组来选择(或修改)对应索引位置的元素。
  • 通过整数数组索引,返回的是原数组的拷贝,而不是视图。
构造一个数组:
a = np.arange(1,21,1).reshape(5,4)
print(a)
结果如下:
选取数组a中的第2、第4、第5行数据:
a[[1,3,4]]
结果如下:
a = np.arange(1,21,1).reshape(5,4)
print(a)

b = a[[1,3]]
print(b)

b[1,2] = 888
print(b)
print(a)
结果如下:
可以看出:当返回的是原数组的拷贝的时候,相当于将原始数组复制了一份,在内存中重新开辟了一块儿空间,存储起来了。因此,当我修改任何一个数组,相互之间没有任何影响。

4. 通过布尔数组进行索引

  • 含义:我们可以提供一个布尔类型的数组(A),然后通过该数组(A)来对另外一个数组(B)进行索引(元素选取)。索引的原则为:如果为True,则选取对应位置的元素,否则不选取。
  • 作用:通过布尔类型的数组进行索引是常见且实用的操作,我们通常用来进行元素选择(或过滤)操作。
① 通过布尔数组取一维数组中的元素
a = np.array([17,19,32,13,27,10,40])
print(a)

a1 = a[[True,True,False,True,False,False,True]]
print(a1)

bool_index = a > 15
print(bool_index)

a2 = a[bool_index]
print(a2)
结果如下:
② 通过布尔数组取二维数组中的元素
b = np.arange(10,30).reshape(5,4)
print(b)

# 这个表示选取第1,2,4行;
b1 = b[[True,True,False,True,False]] 
print(b1)

bool_index = b > 20
print(bool_index)

b2 = b[bool_index]
print(b2)
结果如下:
③ 构造布尔数组的几种常用的运算符
再看看下面几个例子:
c = np.array([15,18,19,23,24,28,30,35,37,40,41,45])
print(c)

c1 = c[c>25]
print(c1)

c2 = c[(c>20) & (c<35)]
print(c2)

c3 = c[(c<20) | (c>40)]
print(c3)

c4 = c[~(c>40)]
print(c4)
结果如下:
④ 取出两个数组中相同的元素
a = np.array([1, 3, 9, 10])
b = np.array([1, 8, 6, 10])

# 对应位置的元素,会进行比较;
print(a[a == b])
结果如下:

关注视频号,参与留言送书活动

  推荐阅读:

到底该选择32位还是64位版本的Office?微软为你解答疑惑

4月份Github上最热门的Java开源项目

5000字 | 24张图带你彻底理解Java中的21种锁

漫话:如何给女朋友解释为什么Java 中"1000==1000"为false,而"100==100"为true?

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存