numpy从值不为0的数组中随机采样

2024-03-29 09:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个包含0和1的numpy二进制数组,如下所示:

import numpy as np
x = np.zeros((10, 10, 10))
x[:4, :4, :4] = 1
x = x.ravel()
np.random.shuffle(x)
x.reshape(10, 10, 10)

现在我要做的是在这个数组中随机取样20个位置,其中值是1,也就是说,我要随机取样20个三维坐标,其中体积元素是打开的

我猜这样做的方法是得到一个所有位置的位置掩码和正值,然后从中采样,但我不知道如何用numpy生成该掩码


Tags: 方法importnumpy元素asnp二进制zeros
1条回答
网友
1楼 · 发布于 2024-03-29 09:16:41

你可以用np.where得到坐标。这将为您提供一个3元组,其中包含位置为1的索引数组

我们可以使用np.transpose(..)zip(..)来生成3元组,然后使用random.sample(..)来选择其中的20个位置

例如:

>>> random.sample(list(zip(*np.where(x.reshape(10,10,10)))), 20)
[(9, 0, 5), (2, 2, 9), (3, 7, 8), (8, 2, 4), (2, 5, 9), (8, 5, 4), (3, 3, 7), (2, 6, 7), (9, 4, 8), (7, 5, 7), (7, 8, 7), (0, 8, 6), (9, 4, 3), (5, 0, 2), (4, 4, 1), (9, 0, 6), (1, 1, 8), (1, 3, 8), (5, 4, 5), (5, 2, 0)]

相关问题 更多 >