У меня есть трехмерная координата. Я хотел бы сопоставить его с одномерным индексом. Как я понимаю, для двумерного случая можно использовать функцию сопряжения. Тем не менее, я придумал следующую наивную реализацию для трехмерного случая:
from numpy import *
# the size of the coordinate space
xn = 100
yn = 100
zn = 100
# make a 3 dimensional matrix of zeros
m = zeros((xn,yn,zn))
def xyz_to_index(m,x,y,z):
# set a particular coordinate to 1
m[x,y,z] = 1
# find its index
i = argmax(m)
# rezero matrix
m[x,y,z] = 0
# return 1D index
return i
Этот код позволяет мне отобразить трехмерную точку на одномерный индекс, как показывает следующий журнал ipython:
In [40]: xyz_to_index(m,34,56,2)
Out[40]: 345602
Итак, теперь мой вопрос: есть ли лучший способ сделать это? Я полагаю, что обход матрицы - не самый эффективный способ преобразования координат. Что бы вы сделали вместо этого?