【发布时间】:2016-12-27 05:52:39
【问题描述】:
我的 google-fu 让我失望了!
我有一个 10x10 numpy 数组初始化为 0 如下:
arr2d = np.zeros((10,10))
对于arr2d 中的每一行,我想为1 分配3 个随机列。我可以使用如下循环来做到这一点:
for row in arr2d:
rand_cols = np.random.randint(0,9,3)
row[rand_cols] = 1
输出:
array([[ 0., 0., 0., 0., 0., 0., 1., 1., 1., 0.],
[ 0., 0., 0., 0., 1., 0., 0., 0., 1., 0.],
[ 0., 0., 1., 0., 1., 1., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 1., 0., 0., 1., 1., 0., 0., 0., 0., 0.],
[ 1., 0., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0., 0., 1., 0., 1., 0.],
[ 0., 0., 1., 0., 1., 0., 0., 0., 1., 0.],
[ 1., 0., 0., 0., 0., 0., 1., 1., 0., 0.],
[ 0., 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
有没有办法利用 numpy 或数组索引/切片以更 Python/优雅的方式(最好是 1 或 2 行代码)实现相同的结果?
【问题讨论】:
-
您是否注意到其中一行只有两个
1s?如果randint(0, 9, 3)生成具有重复值的样本,就会发生这种情况。这就是你想要的吗? -
那么,是否有任何解决方案适合您?
标签: python numpy vectorization