3
所以我想知道是否有更有效的解决方案来生成使用np.random.choice
的2-D阵列,其中每行都有唯一的值。Numpy随机选择产生具有所有唯一值的2D阵列
例如,对于与形状(3,4)
阵列,我们期望的输出:
# Expected output given a shape (3,4)
array([[0, 1, 3, 2],
[2, 3, 1, 0],
[1, 3, 2, 0]])
这意味着,对于每一行中的值必须相对于列数是唯一的。因此,对于out
中的每一行,整数应该只在0到3之间。
我知道我可以通过将False
传递给参数来实现它。但是我只能为每一行做,而不是整个矩阵。举例来说,我可以这样做:
>>> np.random.choice(4, size=(1,4), replace=False)
array([[0,2,3,1]])
但是,当我尝试这样做:
>>> np.random.choice(4, size=(3,4), replace=False)
我得到这样一个错误:
File "<stdin>", line 1, in <module>
File "mtrand.pyx", line 1150, in mtrand.RandomState.choice
(numpy\random\mtrand\mtrand.c:18113)
ValueError: Cannot take a larger sample than population when
'replace=False'
我想这是因为它试图绘制3 x 4 = 12
样本由于矩阵的大小没有更换,但我只给它一个4
的限制。
我知道我可以通过使用for-loop
解决这个问题:
>>> a = (np.random.choice(4,size=4,replace=False) for _ in range(3))
>>> np.vstack(a)
array([[3, 1, 2, 0],
[1, 2, 0, 3],
[2, 0, 3, 1]])
但我想知道是否有一个变通方法,而无需使用任何for循环? (我有点假设添加for循环可能会使它变慢,如果我有大于1000的行数。但正如你可以看到我实际上在a
创建一个生成器,所以我也不确定它是否有一个效果毕竟)
好的技巧=假。 +1 –
太棒了!非常感谢! –
这是天才,谢谢! – Anonymous