В чем разница между A [i] и A [i ,:] в n-мерном (n> 1) массиве numpy? - PullRequest
0 голосов
/ 17 сентября 2018

Предположим, что X является n-мерным (n> 1) массивом пустышек.

Есть ли разница между X [i] и X [i,:]?

например,

X = np.zeros((3,3))

print(X[i])
 #[ 0.  0.  0.]
print(X[i,:])
 #[ 0.  0.  0.]

Я думаю, что это совершенно то же самое, но я думаю, что есть некоторая разница в

условия скорости доступа.

Но я точно не знаю.

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Нарезка сравнительно медленнее.Я доказал это, используя% timeit.Он измеряет время выполнения.

%timeit (X[0])
10000000 loops, best of 3: 163 ns per loop

С нарезкой:

%timeit (X[0, :])
1000000 loops, best of 3: 245 ns per loop
0 голосов
/ 17 сентября 2018

https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing

Если число объектов в кортеже выбора меньше N, то: предполагается для любых последующих измерений.

Целое число i возвращает те же значения, что и i: i + 1, за исключением того, что размерность возвращаемого объекта уменьшается на 1. В частности, кортеж выбора с p-м элементом целым числом (и все другие записи: ) возвращает соответствующий подмассив с размером N - 1.

Они одинаковы. Как показано в другом ответе, есть разница во времени, но времена в ns, где время синтаксического анализа Python и уровни вызовов функций могут иметь значение. Но я бы приветствовал любые исправления, основанные на фактическом чтении кода numpy.

In [190]: X = np.zeros((3,3))
In [191]: X.__array_interface__
Out[191]: 
{'data': (45249072, False),
 'strides': None,
 'descr': [('', '<f8')],
 'typestr': '<f8',
 'shape': (3, 3),
 'version': 3}

Свойства среза одинаковы:

In [192]: X[0].__array_interface__
Out[192]: 
{'data': (45249072, False),
 'strides': None,
 'descr': [('', '<f8')],
 'typestr': '<f8',
 'shape': (3,),
 'version': 3}
In [193]: X[0,:].__array_interface__
Out[193]: 
{'data': (45249072, False),
 'strides': None,
 'descr': [('', '<f8')],
 'typestr': '<f8',
 'shape': (3,),
 'version': 3}

время:

In [194]: timeit X[0]
172 ns ± 2.43 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [195]: timeit X[0,...]
175 ns ± 0.105 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [196]: timeit X[0,:]
264 ns ± 15 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

сравнить время возврата копии (в отличие от вида):

In [199]: timeit X[[0]]
6.73 µs ± 48.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

и такое же индексирование для столбца:

In [206]: timeit X[:,1]
262 ns ± 5.68 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
In [207]: timeit X[...,1]
177 ns ± 2.15 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

(и я получаю то же самое время для гораздо большего массива - поддерживая идею, что любые разницы во времени происходят во время синтаксического анализа / настройки, а не во время фактического построения представления.)

0 голосов
/ 17 сентября 2018

X [i] - получить i-й список X

X [i ,:] - вырезать данные из i-го списка X

Вы получили тот же результат, но на самом деле они разные.

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