python - 将掩码结果转换为不同的随机数

标签 python arrays numpy vectorization mask

我想做这样的事情。

import numpy

# Create a 10x10 array of random numbers.
example_array = numpy.random.random_integers(0, 10, size=(10, 10))

# Locate values that equal 5 and turn them into a new random number.
example_array[example_array == 5] = numpy.random.random_integers(0, 10)

问题出在最后一行。它将单个随机数应用于所有屏蔽值,而不是每个值一个新的随机数。例如,如果选择数字 2,则所有 == 5 的值都变为 2。我希望每个值都有一个全新的值,而不是所有值都具有相同的随机值。我希望这是有道理的!请指教。

对于任何混淆,我们深表歉意。我还没有掌握 numpy 术语。

这是另一个可能有帮助的示例。

# Before replacing 5's with a random number.
array=[4, 5, 5,
       5, 2, 3,
       5, 4, 5]

# After replacing 5's with a random number.
array=[4, 1, 4,
       7, 2, 3,
       2, 4, 8]

这看起来应该很容易做,但我不知道如何有效地做。我想使用 mask 来提高速度。我目前的工作(而且 super 慢!)方法是遍历数组并为任何需要随机化的值掷骰子。

最佳答案

使用 np.random.choice 和要屏蔽的元素数量 -

import numpy as np

mask = example_array == 5
select_nums = np.r_[:5,6:10] # array from which elements are to be picked up
                             # we need to skip number 5, so we are using np.r_
                             # to concatenate range arrays
example_array[mask] = np.random.choice(select_nums, mask.sum())

关于python - 将掩码结果转换为不同的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53465682/

相关文章:

java - 用户的输入可以用于将对象添加到数组中吗?

python - 如何在 Windows 中为 Python 安装 `protoc` 的二进制分发版

python - 使用 postgresql 数据库时 uwsgi 下的 django 应用程序无法启动

Python:列表编辑问题

python - 如何在numpy数组中拆分字符串?

python - 从列表创建 numpy 数组给出了错误的形状

python - 在 Tensorflow 中对两个不同形状矩阵的逐行元素乘积进行向量化

python - cifs 共享上的 shutil.copy2 只能作为 root 使用

javascript - AngularJS 关联数组 Foreach

javascript - 如何在 Javascript 中创建二维数组