2012-05-06 2 views
-1

Не работая с декартовыми графами со времен средней школы, я действительно нашел для них необходимость в реальной жизни. Это может быть странной необходимостью, но я должен распределить данные по точкам на картезианском графе, которые будут доступны путем вызова декартовых координат. На графиках должны быть бесконечные точки. Напр.Расчет декартовых координат с использованием python

     ^
[-2-2,a ][ -1-2,f ][0-2,k ][1-2,p][2-2,u] 
[-2-1,b ][ -1-1,g ][0-1,l ][1-1,q][1-2,v] 
<[-2-0,c ][ -1-0,h ][0-0,m ][1-0,r][2-0,w]> 
[-2--1,d][-1--1,i ][0--1,n][1-1,s][2-1,x] 
[-2--2,e][-1--2,j ][0--2,o][1-2,t][2-2,y] 
         v 

Фактические значения не имеют значения. Но, скажем, я на переменной m, это будет 0-0 на картезианном графе. Мне нужно вычислить декартовы координаты, если бы я поднялся на одно пространство, которое оставило бы меня на l.

Теоретически, у меня есть переменная python, которая == («0-1»), я считаю, что мне нужно разбить ее на -, которая оставила x = 0, y = 1. Затем мне нужно будет выполнить (int (y) +1), а затем снова присоединить x к y с «-» между ними.

То, что я хочу сделать, это вызвать функцию с аргументом (x + 1, y + 0), а для программы выполнить вышеизложенное, а затем вернуть декартовую координату, которую он вычислил.

На самом деле, мне не нужно извлекать значение пространства, только декартова координата. Я предполагаю, что я мог бы использовать re.sub(), однако я не уверен, как правильно отформатировать эту функцию, чтобы разделить ее на «-», и я также не уверен, как правильно выполнить вычисление.

Как мне это сделать?

+1

Что именно вы делаете, и _why_? Учитывая требуемое количество объяснений, возможно, что собеседники будут запутаны. – Shep

ответ

1

Я не уверен, что полностью понимаю проблему, но я бы предложил использовать список списков, чтобы получить 2D-структуру.

Затем, чтобы найти конкретное значение, вы можете сделать coords[x-minX][y-minY] где x, y - целые индексы, которые вы хотите, а minX и minY - минимальные значения (-2 в вашем примере).

Возможно, вы также захотите посмотреть на NumPy, который обеспечивает более гибкий тип массива n-dim объектов, позволяющий «срезать» каждую ось или получать поддиапазоны. Документация NumPy может быть полезна, если вы новичок в работе с такими массивами.

EDIT: Чтобы разбить строку как 0-1 в учредительные целые числа вы можете использовать:

s = '0-1' 
[int(x) for x in s.split('-')] 
+0

Спасибо вам всем, мне удалось заставить его работать, используя функцию разделения ответчика. Спасибо ! :) – abkai

2

Чтобы представить бесконечную решетку, используйте словарь, который отображает кортежи (x, y) в значения.

grid[(0,0)] = m 
grid[(0,1)] = l 

print(grid[(0,0)]) 
0

Вы хотите создать двунаправленное отображение между именами переменных и координатами, то вы можете посмотреть координаты по имя переменной, примените к ней свою функцию, затем найдите следующую переменную, используя новый набор координат, созданный вашей функцией.

Сопоставление между числовыми кортежами, к которым вы можете применить свою функцию, и строки, используемые в качестве ключей в dict, и обратно, просты.