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

时间:2014-08-29 20:30:09

标签: python arrays numpy

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.])

Bonus:我实际上有两个我希望根据其中一个数组中的值进行截断的数组。

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是一个任意数组,我只选择了一些数字作为一个明确的例子。我希望以b被截断的相同方式截断a,以便结果为

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

我不知道它是否会像重复需要做的那样简单来获取a_truncated,所以我想要包含它以防万一有不同的需要完成。

2 个答案:

答案 0 :(得分:6)

您可以使用布尔索引:

>>> 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])

答案 1 :(得分:-3)

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