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?
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