numpy.zeros_like中的订单类型

时间:2019-06-28 00:06:20

标签: python numpy

我正在看Numba Cuda library

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”。< / p>

  

顺序:{'C','F','A'或'K'},可选   覆盖结果的内存布局。 “ C”表示C阶,“ F”表示F阶,“ A”表示“ F”(如果a是Fortran连续的,否则为“ C”)。 “ K”表示尽可能匹配a的布局。

文档中有描述。但是我还是很困惑。 不同订单类型有什么区别?

1 个答案:

答案 0 :(得分:1)

我能想象到的最清晰的例子是一个简单的2d数组:

默认顺序'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])

以此类推;我们可以和其他组合一起玩。