假设,我有一个由10
个元素组成的numpy数组,例如:
a = np.数组([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])
现在,我想有效地将所有大于10的
a
值设置为0.05,因此我将得到:
< code>[2,0,0,7,9,0,0,0,5,3]
因为我目前使用的
for
循环非常慢:
# Zero values below "threshold value".
def flat_values(sig, tv):
"""
:param sig: signal.
:param tv: threshold value.
:return:
"""
for i in np.arange(np.size(sig)):
if sig[i] < tv:
sig[i] = 0
return sig
我怎样才能以最有效的方式实现这一点,同时考虑
由10^6
个元素组成的大数组?
如果你不想改变你的原始数组
In [1]: import numpy as np
In [2]: a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])
In [3]: b = np.where(a > 10, 0, a)
In [4]: a
Out[4]: array([ 2, 23, 15, 7, 9, 11, 17, 19, 5, 3])
In [5]: b
Out[5]: array([2, 0, 0, 7, 9, 0, 0, 0, 5, 3])
通常,列表理解比
python中的循环更快(因为python知道它不需要关心常规for
循环中可能发生的很多事情):
a = [0 if a_ > thresh else a_ for a_ in a]
但是,正如@unutbu正确指出的,numpy允许列表索引和元素比较,为您提供索引列表,所以:
super_threshold_indices = a > thresh
a[super_threshold_indices] = 0
会更快。
通常,在对数据向量应用方法时,请查看numpy。ufuncs
,它通常比使用任何本机机制映射的python函数执行得好得多。
In [7]: a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])
In [8]: a[a > 10] = 0
In [9]: a
Out[9]: array([2, 0, 0, 7, 9, 0, 0, 0, 5, 3])
我有一个2D麻木阵列: 如何获取大于的元素的索引? 现在,我正在做以获取每个最大值的索引,结果是:。我如何实现上述操作?
我试图从以下JSON文本中设置作者值,但我的代码正在删除json文本的所有其他子级。 我尝试将第一本书中的作者更新为以下其他值。 设置步骤后,我的json只有书[1]的内容,如下所示。请告知如何才能获得我用替换值作为输出给出的整个json输入。 问候,萨蒂什。
如果给定的和等于数组中任意两个元素的和,函数需要返回true;否则函数需要返回false。
问题内容: 我有一个numpy数组,我想强制将小于零的每个元素都设为零,并将每个大于255的元素强制降低到255。 例如。x =(-1,7,255,299)=>(0,7,255,255) 是否有一个不太复杂的单行代码可以完成此任务? 问题答案: 答案是numpy.clip 关于标题中的问题:不可以。您可以使用向量化将lambda函数应用于每个元素,但这并不是最佳选择。
问题内容: 我下面有一个数组: 我想要的是基于阈值将此向量转换为二进制向量。以threshold = 0.5为例,大于0.5的元素将转换为1,否则转换为0。 输出向量应如下所示: 我怎样才能做到这一点? 问题答案: 布尔取暖 特殊情况: 如果您的数组值是介于0和1之间的浮动值并且您的阈值为0.5,则这是最佳解决方案。