Ten*_*gis 2 python random numpy
我想随机产生array的n一和m零.
我想到了这个解决方案:
np.ones)np.zeros)np.hstack)np.random.shuffle)似乎不是一个自然的解决方案.一些pythonic的想法?
您的解决方案似乎合理 它准确地说明了它正在做什么,并清楚地做到了.
让我们比较你的实现:
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,但是显然不会更简洁.)
当然,如果你不止一次这样做,真正的答案就是把它分解成一个函数.然后函数的名称将解释它的作用,几乎任何不太折磨的解决方案都很容易理解......