我想知道是否存在从2d numpy数组采样的合理有效方法。如果我有通用数组:
dims = (4,4)
test_array = np.arange(np.prod(dims)).reshape(*dims)
test_array
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
然后,我想将其中的两个元素随机设置为一个特定值(假设为100)。我尝试过创建索引数组,然后应用它:
sample_from = np.random.randint(low=0, high=5, size=(2,2))
sample_from
array([[0, 2],
[1, 1]])
但是,如果我尝试使用此索引,它会给我一个意想不到的答案:
test_array[sample_from]
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[ 4, 5, 6, 7]]])
如果我直接输入索引数组,我会期望(以及想要的结果类型):
test_array[[0,2],[1,1]] = 100
test_array
给予:
array([[ 0, 100, 2, 3],
[ 4, 5, 6, 7],
[ 8, 100, 10, 11],
[ 12, 13, 14, 15]])
非常感谢您的帮助。
答案 0 :(得分:0)
您可以使用np.random.choice
+ np.unravel_index
直接分配给您的数组。
test_array[
np.unravel_index(np.random.choice(np.prod(dims), 2, replace=False), dims)
] = 100