数组中的Numpy条件乘法数据(如果为真,则乘以A,false乘以B)

时间:2015-08-09 21:21:33

标签: python arrays numpy

假设我有一个大数组,值为0~255。我希望这个数组中高于100的每个元素乘以1.2,否则,乘以0.8。

听起来很简单,但除了遍历所有变量并将其逐个乘以之外,我无法找到。

3 个答案:

答案 0 :(得分:3)

如果arr是您的数组,那么这应该有效:

arr[arr > 100] *= 1.2
arr[arr <= 100] *= 0.8

更新:正如评论中所指出的,这可能会影响第一步影响第二步所做的不良后果,所以我们应该做类似的事情

# first get the indexes we of the elements we want to change
gt_idx = arr > 100
le_idx = arr <= 100
# then update the array
arr[gt_idx] *= 1.2
arr[le_idx] *= 0.8

答案 1 :(得分:3)

我的实施速度比np.where更快,对@vindvaki也有一个改进:

a*=((a>100)*1.2+(a<100)*0.8)

使用它你不需要进行额外的函数调用,你也可以使用布尔逻辑乘法器添加任意多个修饰符。如果您的阵列变大(例如10 ** 8大),这个单行将节省一些计算时间。

答案 2 :(得分:0)

np.where就是答案。我花时间弄乱np.place而不知道它的存在。

相关问题