2011-04-27 75 views
10

Tôi có một mảng 4 chiều, tức là, data.shape = (20,30,33,288). Tôi đang tìm kiếm các chỉ số của mảng gần nhất với n sử dụngSử dụng numpy.argmax() trên các mảng đa chiều

index = abs(data - n).argmin(axis = 1), so 
index.shape = (20,33,288) with the indices varying. 

Tôi muốn sử dụng data[index] = "values" với values.shape = (20,33,288), nhưng data[index] trả về lỗi "chỉ số (8) ra khỏi phạm vi (0 < = index < 1) trong kích thước 0 " hoặc hoạt động này mất một thời gian tương đối dài để tính toán và trả về ma trận có hình dạng có vẻ không hợp lý.

Làm cách nào để trả lại một mảng giá trị chính xác? tức là,

data[index] = "values" with values.shape = (20,33,288) 

Điều này có vẻ như là một vấn đề đơn giản, có câu trả lời đơn giản không?

Cuối cùng tôi muốn tìm index2 = abs(data - n2).argmin(axis = 1), vì vậy tôi có thể thực hiện thao tác, cho biết tổng dữ liệu tại chỉ mục vào dữ liệu tại chỉ mục2 mà không lặp qua các biến. Điều này có thể không?

Tôi đang sử dụng python2.7 và phiên bản đầy đủ 1.5.1.

Trả lời

12

Bạn sẽ có thể truy cập vào các giá trị tối đa được lập chỉ mục bởi index sử dụng numpy.indices():

x, z, t = numpy.indices(index.shape) 
data[x, index, z, t] 
+0

Có câu trả lời nào không biết câu trả lời không? –

+3

@AndreasMueller: Có, sử dụng 'tup [: axis] + (index,) + tup [axis:]' làm chỉ mục cho 'data', trong đó' tup' là tuple được trả về bởi 'numpy.indices()'. –

1

Nếu tôi hiểu bạn một cách chính xác, điều này sẽ làm việc:

numpy.put(data, index, values) 

Tôi đã học được một cái gì đó mới ngày hôm nay, cảm ơn.

+0

Cảm ơn đã phản ứng. Tôi không có "giá trị", vì vậy tôi không nghĩ rằng tôi có thể sử dụng numpy.put. Tôi tin câu trả lời của Sven sẽ hoạt động. – NPB