如何截断numpy数组中大于指定值的元素?

4 投票
2 回答
12913 浏览
提问于 2025-04-18 21:35

类似于这个关于Matlab的问题,我想知道如何通过切掉大于某个阈值的数来截断一个numpy数组。这个数组里的值是按升序排列的。

import numpy as np
a=np.linspace(1,10,num=10)
truncatevalue = 5.5

我该如何生成一个只包含小于truncatevaluea数组的值的数组呢?在这种情况下,得到的数组将是

a_truncated=([1., 2., 3., 4., 5.])

附加问题:其实我有两个数组想要根据其中一个数组的值来截断。

import numpy as np
a=np.linspace(1,10,num=10)
b=np.array([19, 17, 15, 14, 29, 33, 28, 4, 90, 6])
truncatevalue = 5.5

b是一个任意的数组,我只是选择了一些数字作为明确的例子。我想要以和a相同的方式来截断b,这样得到的结果将是

a_truncated=([1., 2., 3., 4., 5.])
b_truncated=([19, 17, 15, 14, 29])

我不知道这是否会像处理a_truncated那样简单,所以我想把它也包含进来,以防需要做一些不同的操作。

2 个回答

-3

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有bug,或者是使用的工具和环境不兼容。

当你在网上寻找解决方案时,StackOverflow是一个很好的地方。这里有很多程序员分享他们的经验和解决问题的方法。你可以在这里提问,或者搜索别人遇到的类似问题和答案。

记得在提问时,尽量把问题描述清楚,包括你遇到的错误信息和你尝试过的解决方法。这样其他人才能更好地帮助你。

总之,遇到问题不要慌,先查查资料,看看有没有人遇到过类似的情况,或者在StackOverflow上寻求帮助。

a_truncated = [value for value in a if value < truncateValue]
10

你可以使用布尔索引:

>>> a = np.linspace(1, 10, num=10)
>>> truncatevalue = 5.5
>>> a_truncated = a[a < truncatevalue]
>>> a_truncated
array([ 1.,  2.,  3.,  4.,  5.])

简单来说,a < truncatevalue 会返回一个布尔数组,这个数组会告诉你 a 中的每个元素是否满足条件。然后,利用这个布尔数组去索引 a,就能得到一个新的视图,其中每个元素的索引都是 True 的部分。

所以对于你问题的第二部分,你只需要这样做:

>>> b = np.array([19, 17, 15, 14, 29, 33, 28, 4, 90, 6])
>>> b_truncated = b[a < truncatevalue]
>>> b_truncated
array([19, 17, 15, 14, 29])

撰写回答