>>> print Numeric.take(a, [[1,2],[3,4]])
[[[ 5 6 7 8 9]
[10 11 12 13 14]]
[[15 16 17 18 19]
[20 21 22 23 24]]]
В отличие от среза, функция Numeric.take()
сохраняет размерность массива, если конечно, структура заданных индексов одномерна. Результат Numeric.take(a, [[1,2],[3,4]])
показывает, что взятые по индексам части помещаются в массив со структурой самих индексов, как если бы вместо 1
было написано [5 6 7 8 9]
, а вместо 2
— [10 11 12 13 14]
и т.д.
Функция Numeric.diagonal() возвращает диагональ матрицы. Она имеет следующие аргументы:
a | Исходный массив. |
offset | Смещение вправо от «главной» диагонали (по умолчанию 0). |
axis1 | Первое из измерений, на которых берется диагональ (по умолчанию 0). |
axis2 | Второе измерение, образующее вместе с первым плоскость, на которой и берется диагональ. По умолчанию axis2=1 . |
Функция Numeric.trace()
(для вычисления следа матрицы) имеет те же аргументы, но суммирует элементы на диагонали. В примере ниже рассмотрены обе эти функции:
>>> import Numeric
>>> a = Numeric.reshape(Numeric.arrayrange(16), (4, 4))
>>> print a
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
>>> for i in range(-3, 4):
... print "Sum", Numeric.diagonal(a, i), "=", Numeric.trace(a, i)
...
Sum [12] = 12
Sum [ 8 13] = 21
Sum [ 4 9 14] = 27
Sum [ 0 5 10 15] = 30
Sum [ 1 6 11] = 18
Sum [ 2 7] = 9
Sum [ 3] = 3
Эта функция использует один массив с целыми числами от 0
до n
для выбора значения из одного из заданных массивов:
>>> a = Numeric.identity(4)
>>> b0 = Numeric.reshape(Numeric.arrayrange(16), (4, 4))
>>> b1 = -Numeric.reshape(Numeric.arrayrange(16), (4, 4))
>>> print Numeric.choose(a, (b0, b1))
[[ 0 1 2 3]
[ 4 -5 6 7]
[ 8 9 -10 11]
[ 12 13 14 -15]]
Следующая таблица приводит описания функций модуля Numeric
.