假设我有一个大数组,值为0~255。我希望这个数组中高于100的每个元素乘以1.2,否则,乘以0.8。
听起来很简单,但除了遍历所有变量并将其逐个乘以之外,我无法找到。
答案 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
而不知道它的存在。