如何截断numpy数组中大于指定值的元素?
类似于这个关于Matlab的问题,我想知道如何通过切掉大于某个阈值的数来截断一个numpy数组。这个数组里的值是按升序排列的。
import numpy as np
a=np.linspace(1,10,num=10)
truncatevalue = 5.5
我该如何生成一个只包含小于truncatevalue
的a
数组的值的数组呢?在这种情况下,得到的数组将是
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])