【发布时间】:2020-02-10 00:21:34
【问题描述】:
我有一个行向量数组,我在其上运行 random.shuffle:
#!/usr/bin/env python
import random
import numpy as np
zzz = np.array([[0.1, 0.2, 0.3, 0.4, 0.5],
[0.6, 0.7, 0.8, 0.9, 1. ]])
iterations = 100000
f = 0
for _ in range(iterations):
random.shuffle(zzz)
if np.array_equal(zzz[0], zzz[1]):
print(zzz)
f += 1
print(float(f)/float(iterations))
在 99.6% 到 100% 的时间里,在 zzz 上使用 random.shuffle 会返回一个包含相同元素的列表,例如:
$ ./test.py
...
[[ 0.1 0.2 0.3 0.4 0.5]
[ 0.1 0.2 0.3 0.4 0.5]]
0.996
使用numpy.random.shuffle 似乎可以通过此测试并正确地洗牌行向量。我很想知道为什么random.shuffle 失败了。
【问题讨论】:
-
你应该给
random.shuffle一个列表,例如zl = list(zzz)或zl = zzz.tolist()。不要指望为列表设计的 Python 函数来正确处理二维数组,尤其是在处理就地更改时。 -
random.shuffle 返回 none 而不是修改后的列表。见:stackoverflow.com/questions/17649875/…>
-
@rpm10 是对 OP 的回应吗?
标签: python numpy random shuffle