Символ
|
Описание
|
Пример
|
'b'
|
Байтовый тип
|
np.dtype('b')
|
'i'
|
Знаковое целое число
|
np.dtype('i4') == np.int32
|
'u'
|
Беззнаковое целое число
|
np.dtype('u1') == np.uint8
|
'f'
|
Число с плавающей точкой
|
np.dtype('f8') == np.int64
|
'c'
|
Комплексное число с плавающей точкой
|
np.dtype('c16') == np.complex128
|
'S', 'a'
|
Строка
|
np.dtype('S5')
|
'U'
|
Строка в кодировке Unicode
|
np.dtype('U') == np.str_
|
'V'
|
Неформатированные данные (тип void)
|
np.dtype('V') == np.void
|
«Прихотливая» индексация
Суть «прихотливой» индексации проста: она заключается в передаче массива индексов с целью одновременного доступа к нескольким элементам массива. Например, рассмотрим следующий массив:
import numpy as np
rand = np.random.RandomState(42)
x = rand.randint(100, size=10)
print(x)
[51 92 14 71 60 20 82 86 74 74]
Допустим, нам требуется обратиться к трем различным элементам. Можно сделать это следующим образом:
[x[3], x[7], x[2]]
Out: [71, 86, 14]
С другой стороны, можно передать единый список индексов и получить тот же результат:
ind = [3, 7, 4]
x[ind]
Out: array([71, 86, 60])
В случае «прихотливой» индексации форма результата отражает форму массивов индексов (index arrays), а не форму индексируемого массива:
ind = np.array([[3, 7],
[4, 5]])
x[ind]
Out: array([[71, 86],
[60, 20]])
«Прихотливая» индексация работает и в случае многомерных массивов. Рассмотрим следующий массив:
X = np.arange(12).reshape((3, 4))
X
Out: array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
Аналогично обычной индексации первый индекс относится к строкам, а второй – к столбцам:
row = np.array([0, 1, 2])
col = np.array([2, 1, 3])
X[row, col]
Out: array([ 2, 5, 11])
Первое значение в результате – X[0, 2], второе – X[1, 1], и третье – X[2, 3]. Если мы скомбинируем вектор-столбец и вектор-строку в индексах, то получим двумерный результат:
X[row[:, np.newaxis], col]
Out: array([[ 2, 1, 3],
[ 6, 5, 7],
[10, 9, 11]])
Каждое строчное значение соединяется с каждым вектором-столбцом точно так же, как при транслировании арифметических операций. Например:
row[:, np.newaxis] * col
Out: array([[0, 0, 0],
[2, 1, 3],
[4, 2, 6]])
При работе с «прихотливой» индексацией важно никогда не забывать, что возвращаемое значение отражает транслируемую форму индексов, а не форму индексируемого массива.
Достарыңызбен бөлісу: |