根据我的理解,BLAS 3级矩阵/矩阵例程采用lda
,ldb
等参数,允许人们通过'strided'矩阵。例如,如果我有以下2 x 2列主矩阵:
|1 2|
|3 4|
|x x|
其中x是我想要忽略的数据,我可以使用参数m = 2, n = 2, lda=3
(对于列主矩阵)来表示。我的问题是,可以使用BLAS例程复制这样的矩阵吗?
如果步幅等于矩阵维度(即矩阵没有跨越),则使用矢量复制程序例如是微不足道的。 dcopy(m*n,A,1,B,1)
这样做。当矩阵元素不连续时,有没有办法做到这一点,即lda / stride!= m
我可以想到这样做的一种方法是重复调用dcopy
增加偏移量,同时保持incrx
参数等于m。它看起来效率不高。或者dgemm
,其中B = 1且C = 0。
请查看此文档:
http://www.netlib.org/lapack/explore-3.1.1-html/slacpy.f.html
SLACPY( UPLO, M, N, A, LDA, B, LDB )
例如,上面的内容可以满足你想要的全部或部分A到B的单精度实数矩阵。它的使用相当紧张。当然,你会发现所有口味D,C,Z的实现