типы заказов в numpy.zeros_like - PullRequest
0 голосов
/ 28 июня 2019

Я смотрю на библиотеку Numba Cuda .

import numbapro.cudalib.cublas as cublas
blas = cublas.Blas()

n =100
A = np.random.random((n, n)).astype(np.float32)
B = np.random.random((n, n)).astype(np.float32)
C = np.zeros_like(A, order='F')

blas.gemm('T', 'T', n, n, n, 1.0, A, B, 1.0, C)

assert(np.allclose(np.dot(A, B), C))

После проверки numpy.zeros_like мне интересно узнать о необязательном параметре order , который имеет 4 различных типа: 'C', 'F', 'A' и 'K'.

порядок: {'C', 'F', 'A' или'K'}, опционально Переопределяет структуру памяти результата.«C» означает C-порядок, «F» означает F-порядок, «A» означает «F», если a является непрерывным по Фортрану, «C» в противном случае.«К» означает соответствие макета как можно точнее.

В документации есть описания.Но я все еще в замешательстве.В чем разница между разными типами заказов?

1 Ответ

1 голос
/ 28 июня 2019

Самый ясный пример, который я могу представить для этих ордеров, - это простой двумерный массив:

Порядок по умолчанию, 'C':

In [5]: x = np.arange(12).reshape(3,4)                                                                                                   
In [6]: x                                                                                                                                
Out[6]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

'F' - не так, как значения отсчитывают столбцы:

In [7]: x = np.arange(12).reshape(3,4, order='F')                                                                                        
In [8]: x                                                                                                                                
Out[8]: 
array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [ 2,  5,  8, 11]])

теперь возьмите этот последний 'F' порядок и сравняйте значения

In [9]: x.ravel(order='C')                                                                                                               
Out[9]: array([ 0,  3,  6,  9,  1,  4,  7, 10,  2,  5,  8, 11])
In [10]: x.ravel(order='F')                                                                                                              
Out[10]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
In [11]: x.ravel(order='K')                                                                                                              
Out[11]: array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

и т. Д .; мы можем играть с другими комбинациями.

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