2011-07-21 36 views
9

Tôi đang cố gắng lập chỉ mục các mảng 3D lớn bằng cách sử dụng một mảng 2D các chỉ báo từ hàm argmin (hoặc hàm argmax, v.v.). Dưới đây là ví dụ dữ liệu của tôi:NumPy: sử dụng mảng chỉ mục 2D từ argmin trong lát 3D

import numpy as np 
shape3d = (16, 500, 335) 
shapelen = reduce(lambda x, y: x*y, shape3d) 

# 3D array of [random] source integers 
intcube = np.random.uniform(2, 50, shapelen).astype('i').reshape(shape3d) 

# 2D array of indices of minimum value along first axis 
minax0 = intcube.argmin(axis=0) 

# Another 3D array where I'd like to use the indices from minax0 
othercube = np.zeros(shape3d) 

# A 2D array of [random] values I'd like to assign in othercube 
some2d = np.empty(shape3d[1:]) 

Tại thời điểm này, cả hai mảng 3D có hình dạng tương tự, trong khi mảng minax0 có hình dạng (500, 335). Bây giờ tôi muốn gán giá trị từ mảng 2D some2d vào mảng 3D othercube sử dụng minax0 cho vị trí chỉ mục của thứ nguyên đầu tiên. Đây là những gì tôi đang cố gắng, nhưng không hoạt động:

othercube[minax0] = some2d # or 
othercube[minax0,:] = some2d 

ném lỗi:

ValueError: dimensions too large in fancy indexing

Lưu ý: Những gì tôi đang hiện đang sử dụng, nhưng không phải là rất NumPythonic:

for r in range(shape3d[1]): 
    for c in range(shape3d[2]): 
     othercube[minax0[r, c], r, c] = some2d[r, c] 

Tôi đã tìm kiếm trên web để tìm các ví dụ tương tự có thể lập chỉ mục othercube, nhưng tôi không tìm thấy bất kỳ thứ gì thanh lịch. Điều này có yêu cầu một số advanced index không? Có lời khuyên nào không?

+0

Cảm ơn bạn vì đã có vấn đề này! Ngày của tôi là tốt hơn cho câu trả lời nó gây ra. – Richard

Trả lời

9

lập chỉ mục ưa thích có thể hơi không trực quan. May mắn thay, tutorial có một số ví dụ hay.

Về cơ bản, bạn cần phải xác định j và k trong đó mỗi lần áp dụng minidx. numpy không suy luận nó từ hình dạng.

trong ví dụ của bạn:

i = minax0 
k,j = np.meshgrid(np.arange(335), np.arange(500)) 
othercube[i,j,k] = some2d 
+0

Làm thế nào điều này sẽ làm việc trên mảng chỉ mục 3D từ một mảng 4D? – Elvin

Các vấn đề liên quan