我有一个整数的二维数组,我们将它称为“A”。快速计算随机3D numpy阵列从2D numpy阵列
我想创建所有的1和0,使得一个3维阵列 “B”:
- 对于任何固定的(I,J)
sum(B[i,j,:])==A[i.j]
,即,B[i,j,:]
包含A[i,j]
1s
在它 - 1是随机放置在第三维。
我知道如何使用标准的python索引来做这件事,但事实证明这很慢。
我正在寻找一种方式来做到这一点,利用可以使Numpy快速的功能。
这是我将如何使用标准索引做到这一点:
B=np.zeros((X,Y,Z))
indexoptions=range(Z)
for i in xrange(Y):
for j in xrange(X):
replacedindices=np.random.choice(indexoptions,size=A[i,j],replace=False)
B[i,j,[replacedindices]]=1
能有人请解释我怎么能以更快的方式做到这一点?
编辑:下面是一个例子 “A”:
A=np.array([[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]])
在这种情况下
X = Y = 5和Z> = 5
试图在这方面取得进展,我问了一个更简单的问题:http://stackoverflow.com/questions/26310897/numpy-create-bool-array-like-repeat-but-in-multiple-dimensions - 但后来我意识到我计划的'np.random.shuffle(np.rollaxis(B,2))'不会独立地混洗所有的行,所以这还不是一个好答案。积木,也许吧。 :) – 2014-10-11 04:22:41