Python 获取数组中等于给定值大小的值

引言

可能很多小伙伴看到这个标题会觉得很绕口,甚至可能会觉得这属于脱裤子放屁,多此一举,但是这里请大家耐心往下看,这篇文章将介绍一个在实际应用中比较常见的数据处理的示例。

正文

基础方法

比如,这里我们有一个 numpy 数组。

[1 2 3 4 5 6 7 8 9 0]

我们想要获取到它中间等于 5 的值。那么该怎么操作呢?

方法1

遍历整个数组进行查找并打印

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
num = 5
for element in arr:
    if element == num:
        print(element)
"""
result:
5
"""

当然,如果加上 enumerate 我们也可以顺带得到其对应的索引值。如下:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
num = 5
for index, element in enumerate(arr):
    if element == num:
        print(index, element)
"""
result:
4 5
"""

虽然我们得到了结果,但是显然这并不 Pythonic。

方法2------使用 np.where() 函数

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
num = 5
result = arr[np.where(arr == num)]
print(result)
"""
result:
[5]
"""

相比于之前,我们得到的是一个数组,而不再是一个数罢了。至于获取对应的索引值,只需要打印 np.where(arr == num) 即可,如下:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
num = 5
index = np.where(arr == num)
print(index)
"""
result:
(array([4], dtype=int64),)
"""

但是,这仍旧不是最简单的方式

方法3------数组操作

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 0])
num = 5
result = arr[arr == num]
print(result)
"""
result:
[5]
"""

可以看到,我们也得到了想要的结果,看到这里,感觉还是在扯,别着急,看一个下面的例子。

示例1

在现实的例子中,往往我们的数组元素本身并不是一些整数,而是小数,比如:

[1.4465446, 2.5445116, 3.654451, 4.156154964, 5.516515, 6.1264847, 
7.126448, 8.1264984, 9.16154654, 0.54881651]

这时,我们想要获取到它们谁更加近似等于我们给定的数据 5 该怎么办呢?

import numpy as np

arr = np.array([1.4465446, 2.5445116, 3.654451, 4.156154964, 5.416515, 6.1264847, 7.126448, 8.1264984, 9.16154654, 0.54881651])
num = 5
result = arr[np.round(arr, 0) == num]
print(result)
"""
result:
[5.416515]
"""

到这里,是不是体会到了标题真正的含义了?有人也许会说,你这里如果是 5.5 几几几就找不到值了,然而这种担心是多余的,因为实际中,往往会存在很多个接近 5 的小数,总会有值的,如果没有,那说明确实也没有数字接近 5。

示例 2

更经典的一个示例是,如果我们有两组一一对应的数据,比如:

1 1.4465446
2 2.5445116
3 3.654451
4 4.156154964
5 5.416515
6 5.123546
7 5.461682
8 5.1565446
9 5.364588979
10 5.7845151

我们想要获取后面一列数字中接近 5 的值所对应的第一列数字的值,但是我们发现后面一列数字中有很多值满足条件,那么如何找出前一列中唯一对应的数字呢?

import numpy as np

index = np.arange(1, 11)
arr = np.array([1.4465446, 2.5445116, 3.654451, 4.156154964, 5.416515, 5.123546, 5.461682, 5.1565446, 5.364588979, 5.7845151])
num = 5
result = index[int(np.round(np.mean(arr[np.round(arr, 0) == num]), 0))]
print(result)
"""
result:
6
"""

至此,我们完全说清楚了这个问题。

注意,本文所给出的方法适用于数据在给定数值附近波动的情况,如果数据本身在给定数值附近是单调的,应该采用 Python 寻找一个一维数组中最接近某个值的元素 一文中给出的方法。

如果大家觉得有用,就请点个赞吧~

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

勤奋的大熊猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值