Tôi có một mảng 2 chiều các số nguyên, chúng tôi sẽ gọi nó là "A".nhanh chóng tính toán mảng numpy 3D ngẫu nhiên từ mảng numpy 2D
Tôi muốn tạo ra một mảng 3 chiều "B" của tất cả các 1s và 0s đến nỗi:
- cho bất kỳ cố định (i, j)
sum(B[i,j,:])==A[i.j]
, có nghĩa là,B[i,j,:]
chứaA[i,j]
1s
trong đó - số 1 được đặt ngẫu nhiên trong thứ nguyên thứ 3.
Tôi biết cách tôi sẽ làm điều này bằng cách sử dụng chỉ mục chuẩn python nhưng điều này hóa ra rất chậm.
Tôi đang tìm cách để thực hiện việc này, tận dụng các tính năng có thể khiến Numpy nhanh.
Dưới đây là làm thế nào tôi sẽ làm điều đó bằng lập chỉ mục tiêu chuẩn:
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
Ai đó có thể vui lòng giải thích làm thế nào tôi có thể làm điều này một cách nhanh hơn?
Edit: Đây là một ví dụ "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]])
trong trường hợp này X = Y = 5 và Z> = 5
Đang cố gắng thực hiện tiến trình này, tôi đã hỏi một câu hỏi đơn giản hơn: http://stackoverflow.com/questions/26310897/numpy-create-bool-array-like-repeat-but-in-multiple-dimensions - nhưng sau đó tôi nhận ra rằng 'np.random.shuffle (np.rollaxis (B, 2)) đã được lên kế hoạch của tôi' không xáo trộn tất cả các hàng một cách độc lập, vì vậy đây chưa hẳn là câu trả lời. Khối xây dựng, có thể. :) –