Простой вопрос о матрице NumPy в Python - PullRequest
0 голосов
/ 01 декабря 2009

Давайте предположим, что у меня есть матричная переменная с именем MATRIX с 3 координатами: (x, y, z).

обрабатывает значение матрицы через следующий код

myVar = MATRIX[0,0,0]

равно

myVar = MATRIX[0,0][0]

или

myVar = MATRIX[0][0,0]

А если у меня есть следующий код?

myTuple = (0,0)
myScalar = 0
myVar = MATRIX[myTuple, myScalar]

Последняя строка эквивалентна

myVar = MATRIX[myTuple[0], myTuple[1], myScalar]

Я провел простые тесты, и, кажется, так, но, возможно, это не так во всех случаях. Как квадратные скобки работают в Python с матрицей? С самого первого дня я был смущен тем, как они работают.

Спасибо

Ответы [ 2 ]

6 голосов
/ 01 декабря 2009

Полагаю, у вас есть экземпляр array, а не matrix, поскольку последний может иметь только два измерения.

m[0, 0, 0] получает элемент в позиции (0, 0, 0). m[0, 0] получает целый подмассив (фрагмент), который сам по себе array. Вы можете получить первый элемент этого подмассива следующим образом: m[0, 0][0], поэтому оба синтаксиса работают (хотя m[i, j, k] предпочтительнее, потому что в нем нет ненужного промежуточного шага).

Взгляните на этот сеанс ipython:

rbonvall@andy:~$ ipython
Python 2.5.4 (r254:67916, Sep 26 2009, 08:19:36) 
[...]

In [1]: import numpy.random

In [2]: m = numpy.random.random(size=(3, 3, 3))

In [3]: m
Out[3]: 
array([[[ 0.68853531,  0.8815277 ,  0.53613676],
        [ 0.9985735 ,  0.56409085,  0.03887982],
        [ 0.12083102,  0.0301229 ,  0.51331851]],

       [[ 0.73868543,  0.24904349,  0.24035031],
        [ 0.15458694,  0.35570177,  0.22097202],
        [ 0.81639051,  0.55742805,  0.5866573 ]],

       [[ 0.90302482,  0.29878548,  0.90705737],
        [ 0.68582033,  0.1988247 ,  0.9308886 ],
        [ 0.88956484,  0.25112987,  0.69732309]]])

In [4]: m[0, 0]
Out[4]: array([ 0.68853531,  0.8815277 ,  0.53613676])

In [5]: m[0, 0][0]
Out[5]: 0.6885353066709865

Это работает так только для numpy array s. Встроенные в Python кортежи и списки не индексируются кортежами, а только целыми числами.

1 голос
/ 01 декабря 2009

Невозможно индексировать кортеж с другим кортежем, поэтому ни один из этих кодов недопустим.

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