N-мерные массивы - Python / Numpy - PullRequest
4 голосов
/ 24 января 2011

просто интересно, есть ли какой-нибудь умный способ сделать следующее.

У меня есть N-мерный массив, представляющий сетку 3x3

grid = [[1,2,3],
        [4,5,6],
        [7,8,9]]

Для того, чтобыполучить первый ряд Я делаю следующее:

grid[0][0:3]
>> [1,2,3]

Чтобы получить первый столбец Я хотел бы сделать что-то вроде этого (даже если этоневозможно):

grid[0:3][0]
>> [1,4,7]

Случайно ли NumPy поддерживает что-то похожее на это?


Есть идеи?

Ответы [ 3 ]

10 голосов
/ 24 января 2011

Да, в Numpy есть нечто подобное:

import numpy as np

grid = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])

grid[0,:]
# array([1, 2, 3])

grid[:,0]
# array([1, 4, 7])
2 голосов
/ 24 января 2011

Вы можете использовать zip для транспонирования матрицы, представленной в виде списка списков:

>>> zip(*grid)[0]
(1, 4, 7)

Что-то большее, чем просто, и я бы использовал Numpy.

1 голос
/ 24 января 2011

Чтобы получить столбцы в Python, вы можете использовать:

[row[0] for row in grid]
>>> [1,4,7]

Вы можете переписать свой код для получения строки как

grid[0][:]

, поскольку [:] просто копирует весь массив, нет необходимости добавлять индексы.

Однако, в зависимости от того, чего вы хотите достичь, я бы сказал, что лучше просто написать небольшой класс матрицы, чтобы скрыть эту реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...