我有一個整數的二維數組,我們將它稱爲「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