Python随机数组0和1

Ten*_*gis 2 python random numpy

我想随机产生arrayn一和m零.

我想到了这个解决方案:

  1. 产生那些数组(np.ones)
  2. 产生零数组(np.zeros)
  3. 将它们组合成一个数组(np.hstack)
  4. 随机播放数组(np.random.shuffle)

似乎不是一个自然的解决方案.一些pythonic的想法?

aba*_*ert 7

您的解决方案似乎合理 它准确地说明了它正在做什么,并清楚地做到了.

让我们比较你的实现:

a = np.hstack((np.ones(n), np.zeros(m)))
np.random.shuffle(a)
Run Code Online (Sandbox Code Playgroud)

......有一个明显的选择:

a = np.ones(n+m)
a[:m] = 0
np.random.shuffle(a)
Run Code Online (Sandbox Code Playgroud)

这可能会节省一些时间不分配和移动大量数据,但需要更多的思考才能理解.

并在Python中而不是在NumPy中执行:

a = np.array([1]*n + [0]*m)
np.random.shuffle(a)
Run Code Online (Sandbox Code Playgroud)

...可能会更简洁,但似乎不那么惯用NumPy(以同样的方式np.array([1]*n)比不那么惯用np.ones(n)),并且它会变得更慢并且没有充分理由使用更多内存.(你可以通过使用来改善记忆np.fromiter,但是显然不会更简洁.)

当然,如果你不止一次这样做,真正的答案就是把它分解成一个函数.然后函数的名称将解释它的作用,几乎任何不太折磨的解决方案都很容易理解......