Хорошо, так у меня есть таблица ху координаты для связки различных точек, например так:Looping через таблицу для расчета разделений - Python
ID X Y 1 403.294 111.401 2 1771.424 62.183 3 804.812 71.674 4 2066.54 43.456 5 2208.55 40.907
Каждая строка представляет объект с его ID, X и Y указаны , На самом деле моя таблица содержит около 1345 строк. То, что я пытаюсь сделать, это цикл каждой строки и вычисление разделения этого объекта из всех других объектов в таблице, которые я в конечном итоге использую для создания гистограммы. То, что у меня есть до сих пор:
sep_dat = np.zeros(shape=(5,5)) #create array for writing into
dat = np.loadtxt('SEA_mini_test.tab') #table of data
IDs = dat[:,0]
X_dat = dat[:,1]
X_dat = np.sort(X_dat)
Y_dat = dat[:,2]
Y_dat = np.sort(Y_dat)
for i, x, y in zip(xrange(len(X_dat)), X_dat, Y_dat):
sep_dat[i] = math.sqrt((x-X_dat)**2+(y-Y_dat)**2)
np.savetxt('SEA_mini_seps.dat', sep_dat, fmt='%10.9f')
Но мне еще нужно, чтобы он успешно работал. Последней ошибкой я получил:
TypeError: only length-1 arrays can be converted to Python scalars
Итак, как я могу заставить это работать правильно?
И как я могу заставить его игнорировать себя при выполнении расчетов? Как и для объекта 1 (строка 1), я не хочу, чтобы он вычислял выделение от себя. Я попытался добавить идентификаторы в zip и добавить оператор if внутри цикла for до вычисления, например if id != id:
, но это не сработает. Кто-нибудь имеет представление о том, как я могу это сделать?
И еще один вопрос, который у меня был, как я мог записать все данные в сплющенный массив? Прямо сейчас я создал пустой массив нулей, которые я записываю с вычисленными значениями, но в конце получаю массив (5,5). Но я хочу (5,1), чтобы я мог построить его как гистограмму. Есть идеи?
почему вы сортировки х и у по отдельности? Как вы определяете разделение - расстояние от центра масс? –
Что ты имеешь в виду? Разделение является просто sqrt (dx^2 + dy^2). Я просто пытаюсь вычислить физическое разделение одного объекта на все другие объекты. – Courtney