说,我有一个由10
元素组成的numpy数组,例如:
a = np.array([2, 23, 15, 7, 9, 11, 17, 19, 5, 3])
现在我想有效地设置所有a
值高于10
对0
,所以我会得到:
[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
元素,如何以最有效的方式实现呢?
通常,列表理解比for
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函数要好得多。
@unutbu
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])
假设,我有一个由个元素组成的numpy数组,例如: 现在,我想有效地将所有大于
我有一个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,则这是最佳解决方案。
我需要找到高于指定阈值的的第一个和最后一个元素。我找到了以下解决方案,这是有效的,但它看起来有点令人费解。有没有更简单/更蟒蛇的方式?