我有一个2D数组(图像),其中我想用某个范围内的随机数替换大于某个阈值的数组值。我的尝试是使用numpy.random.uniform,如此
Z[Z > some_value] = uniform(lower_limit,upper_limit)
但是我发现这会用相同的随机值替换阈值以上的所有值。我想用不同的随机值替换阈值以上的所有数组值。
我认为这需要对整个数组进行一些交互,如果条件满足,我需要生成一个随机值。我该怎么做?
答案 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))
会做你想做的事。