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

Posted

技术标签:

【中文标题】如何截断大于指定值的值的numpy数组?【英文标题】:How to truncate a numpy array for values greater than a specified value? 【发布时间】:2014-10-23 21:48:31 【问题描述】:

类似于this Matlab question,我想知道如何通过截断大于某个阈值的值来截断 numpy 数组。相关数组的值按升序排列。

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

我将如何生成一个数组,其 a 的值小于 truncatevalue 并且只包含这些值?在这种情况下,结果数组将是

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 所需的操作一样简单,所以我也想包含它,以防需要做一些不同的事情。

【问题讨论】:

【参考方案1】:

您可以使用布尔索引:

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

本质上,a &lt; truncatevalue 返回一个布尔数组,指示a 的元素是否满足条件。使用这个布尔数组来索引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])

【讨论】:

你需要a_truncated = a[a &lt; truncatevalue]吗? @Joshua - 要在您的示例中返回 a_truncatedb_truncated,您只需要布尔数组 a &lt; truncatevalue。只要定义了abtruncatevalue,您就可以找到任一数组。 (您无需先将a_truncated 分配给a[a &lt; truncatevalue]。)【参考方案2】:
a_truncated = [value for value in a if value < truncateValue]

【讨论】:

以上是关于如何截断大于指定值的值的numpy数组?的主要内容,如果未能解决你的问题,请参考以下文章

Python如何删除numpy数组中指定值的元素

在numpy中将int数组转换为字符串数组而不截断

numpy | 插入字符数组被截断测试

Python 2D NumPy 数组理解

在 1D NumPy 数组中查找值的索引/位置(具有相同的值)[重复]

怎样将Numpy矩阵中大于或小于某一个值的元素的值统一置为某什值用函数where()