如何截断一个numpy数组,使其值大于指定值?

4

这个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个回答

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会返回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 < truncatevalue] 吗? - NeutronStar
@Joshua - 在你的例子中,要返回a_truncatedb_truncated,你只需要使用布尔数组a < truncatevalue。只要定义了abtruncatevalue,就可以找到任何一个数组。(你不需要先将a_truncated分配给a[a < truncatevalue]。) - Alex Riley

-3
a_truncated = [value for value in a if value < truncateValue]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接