Простой вопрос о numpy matrix в python
Вопрос
Предположим, у меня есть числовая матричная переменная под названием 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 с матрицами numpy?С самого первого дня я чувствовал себя сбитым с толку тем, как они работают.
Спасибо
Решение
Я предполагаю, что у вас есть 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 кортежи и списки можно индексировать не по кортежам, а только по целым числам.
Другие советы
Невозможно проиндексировать кортеж другим кортежем, поэтому ни один из этих кодов не является допустимым.