用不同的随机数替换2D数组中的值

时间:2016-03-07 21:12:04

标签: python arrays numpy random

我有一个2D数组(图像),其中我想用某个范围内的随机数替换大于某个阈值的数组值。我的尝试是使用numpy.random.uniform,如此

Z[Z > some_value] = uniform(lower_limit,upper_limit)

但是我发现这会用相同的随机值替换阈值以上的所有值。我想用不同的随机值替换阈值以上的所有数组值。

我认为这需要对整个数组进行一些交互,如果条件满足,我需要生成一个随机值。我该怎么做?

2 个答案:

答案 0 :(得分:1)

你是正确的,迭代将是正确的方法。我们来做list comprehension

[uniform(lower_limit, upper_limit) if i > some_value else i
 for i in Z]

让我们一步一步。取个人价值。如果它大于阈值,则使用随机生成的阈值,否则使用原始值。

uniform(lower_limit, upper_limit) if i > some_value else i

对Z

中的每个元素重复此操作
for i in Z

对于2D数组,嵌套多个推理。想象一下,上面的解决方案是在一行中击中所有内容然后在每一行重复它。

[[uniform(lower_limit, upper_limit) if i > some_value else i
  for i in row]
  for row in Z]

答案 1 :(得分:0)

检查uniform的第三个参数。使用size=N将生成长度为N的随机值数组。因此

z[z>some_value] = np.random.uniform(lower, upper, len(z>some_value))

会做你想做的事。