我正在看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的布局。
文档中有描述。但是我还是很困惑。 不同订单类型有什么区别?
答案 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])
以此类推;我们可以和其他组合一起玩。