>>> print a
[[0 1 2]
[3 4 5]
[6 7 8]]
Массив можно превратить обратно в список с помощью метода tolist()
:
>>> a.tolist()
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
Объекты–массивы Numeric
используют расширенный синтаксис выделения среза. Следующие примеры иллюстрируют различные варианты записи срезов. Функция Numeric.arrayrange()
является аналогом range()
для массивов.
>>> import Numeric
>>> a = Numeric.arrayrange(24) + 1
>>> a.shape = (4, 6)
>>> print 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]]
>>> print a[1,2] # элемент 1,2
9
>>> print a[1,:] # строка 1
[ 7 8 9 10 11 12]
>>> print a[1] # тоже строка 1
[ 7 8 9 10 11 12]
>>> print a[:,1] # столбец 1
[ 2 8 14 20]
>>> print a[-2,:] # предпоследняя строка
[13 14 15 16 17 18]
>>> print a[0:2,1:3] # окно 2x2
[[2 3]
[8 9]]
>>> print a[1,::3] # каждый третий элемент строки 1
[ 7 10]
>>> print a[:,:: -1] # элементы строк в обратном порядке
[[ 6 5 4 3 2 1]
[12 11 10 9 8 7]
[18 17 16 15 14 13]
[24 23 22 21 20 19]]
Срез не копирует массив (как это имеет место со списками), а дает доступ к некоторой части массива. Далее в примере меняется на 0 каждый третий элемент строки 1:
>>> a[1,::3] = Numeric.array([0,0])
>>> print a
[[ 1 2 3 4 5 6]
[ 0 8 9 0 11 12]
[13 14 15 16 17 18]
[19 20 21 22 23 24]]
В следующих примерах находит применение достаточно редкая синтаксическая конструкция: срез с многоточием ( Ellipsis
). Многоточие ставится для указания произвольного числа пропущенных размерностей ( :
, :
, ...
, :
):
>>> import Numeric
>>> a = Numeric.arrayrange(24) + 1
>>> a.shape = (2,2,2,3)
>>> print 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]]]]
>>> print a[0,...] # 0–й блок
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
>>> print a[0,:,:,0] # срез по первой и последней размерностям
[[ 1 4]
[ 7 10]]
>>> print a[0,...,0] # то же, но с использованием многоточия
[[ 1 4]
[ 7 10]]
Модуль Numeric
определяет набор функций для применения к элементам массива. Функции применимы не только к массивам, но и к последовательностям (к сожалению, итераторы пока не поддерживаются). В результате получаются массивы.
Функция |
Описание |
add(x, y) , subtract(x, y) |
Сложение и вычитание |
multiply(x, y) , divide(x, y) |
Умножение и деление |
remainder(x, y) , fmod(x, y) |
Получение остатка от деления (для целых чисел и чисел с плавающей запятой) |
power(x) |
Возведение в степень |
sqrt(x) |
Извлечение корня квадратного |
negative(x) , absolute(x) , fabs(x) |
Смена знака и абсолютное значение |
ceil(x) , floor(x) |
Наименьшее (наибольшее) целое, большее (меньшее) или равное аргументу |
hypot(x, y) |
Длина гипотенузы (даны длины двух катетов) |
sin(x) , cos(x) , tan(x) |
Тригонометрические функции |
arcsin(x) , arccos(x) , arctan(x) |
Обратные тригонометрические функции |
arctan2(x, y) |
Арктангенс от частного аргумента |
sinh(x) , cosh(x) , tanh(x) |
Гиперболические функции |
arcsinh(x) , arccosh(x) , arctanh(x) |
Обратные гиперболические функции |
exp(x) |
Экспонента (e x) |
log(x) , log10(x) |
Натуральный и десятичный логарифмы |
maximum(x, y) , minimum(x, y) |
Максимум и минимум |
conjugate(x) |
Сопряжение (для комплексных чисел) |
equal(x, y) , not_equal(x, y) |
Равно, не равно |
greater(x, y) , greater_equal(x, y) |
Больше, больше или равно |
less(x, y) , less_equal(x, y) |
Меньше, меньше или равно |
logical_and(x, y) , logical_or(x, y) |
Логические И, ИЛИ |
logical_xor(x, y) |
Логическое исключающее ИЛИ |
logical_not(x) |
Логические НЕ |
bitwise_and(x, y) , bitwise_or(x, y) |
Побитовые И, ИЛИ |
bitwise_xor(x, y) |
Побитовое исключающее ИЛИ |
invert(x) |
Побитовая инверсия |
left_shift(x, n) , right_shift(x, n) |
Побитовые сдвиги влево и вправо на n битов |
Перечисленные функции являются объектами типа ufunc
и применяются к массивам поэлементно. Эти функции имеют специальные методы:
Читать дальше
Конец ознакомительного отрывка
Купить книгу