Подтвердить что ты не робот

2D-массивы в Python

Каков наилучший способ создания 2D-массивов в Python?

Я хочу, чтобы я хотел сохранить такие значения:

X , Y , Z

чтобы я обращался к данным типа X[2],Y[2],Z[2] или X[n],Y[n],Z[n], где n является переменной. Вначале я не знаю, насколько велика n, поэтому я хотел бы добавить значения в конце.

4b9b3361

Ответ 1

>>> a = []

>>> for i in xrange(3):
...     a.append([])
...     for j in xrange(3):
...             a[i].append(i+j)
...
>>> a
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
>>>

Ответ 2

В зависимости от того, что вы делаете, у вас может не быть двухмерного массива.

В 80% случаев у вас есть простой список "похожих на строки объектов", которые могут быть правильными последовательностями.

myArray = [ ('pi',3.14159,'r',2), ('e',2.71828,'theta',.5) ]

myArray[0][1] == 3.14159
myArray[1][1] == 2.71828

Чаще всего это экземпляры класса или словаря или набора или чего-то более интересного, что у вас не было на предыдущих языках.

myArray = [ {'pi':3.1415925,'r':2}, {'e':2.71828,'theta':.5} ]

20% времени, когда у вас есть словарь, с помощью пары

myArray = { (2009,'aug'):(some,tuple,of,values), (2009,'sep'):(some,other,tuple) }

Редко вам понадобится матрица.

У вас большое, большое количество классов коллекций в Python. Коэффициенты хороши, что у вас есть что-то более интересное, чем матрица.

Ответ 3

В Python для этой цели обычно используйте списки. Списки могут быть вложены произвольно, что позволяет создавать 2D-массив. Не каждый подсписщик должен быть того же размера, что и решает другую проблему. Взгляните на примеры, с которыми я связан.

Ответ 4

Если вы хотите сделать серьезную работу с массивами, вы должны использовать numpy library. Это позволит вам, например, выполнять векторное сложение и умножение матрицы, а для больших массивов - намного быстрее, чем списки Python.

Однако, numpy требует, чтобы размер был предопределен. Конечно, вы также можете хранить массивы numpy в списке, например:

import numpy as np
vec_list = [np.zeros((3,)) for _ in range(10)]
vec_list.append(np.array([1,2,3]))
vec_sum = vec_list[0] + vec_list[1]  # possible because we use numpy
print vec_list[10][2]  # prints 3

Но так как ваши массивы numpy довольно малы, я думаю, что есть некоторые накладные расходы по сравнению с использованием кортежа. Все зависит от ваших приоритетов.

Смотрите также этот другой question, который довольно похож (кроме размера переменной).

Ответ 5

Я бы предположил, что вы используете такой словарь:

arr = {}

arr[1] = (1, 2, 4)
arr[18] = (3, 4, 5)

print(arr[1])
>>> (1, 2, 4)

Если вы не уверены, что запись указана в словаре, вам понадобится механизм проверки при вызове "arr [x]", например. примерка за исключением.

Ответ 7

Пожалуйста, обратите внимание на следующие коды:

from numpy import zeros
scores = zeros((len(chain1),len(chain2)), float)