C++ 使用矩阵c\c++;基于行索引的API
在我的项目中,我在C++ 使用矩阵c\c++;基于行索引的API,c++,matlab,matrix,C++,Matlab,Matrix,在我的项目中,我在CUDA\c++中执行一些计算,然后使用Matlab中的矩阵API(mxCreateNumericArray)将数组作为矩阵保存到.mat文件中。在c++中,我使用本机基于行的索引,但是Matlab函数采用基于列的顺序。有没有办法快速解决这个问题?我可以将基于行的转换为基于列的,但不想这样做(为了更高的性能)。这里是一段C++代码(带有3x3简单数组): 这里是矩阵 a={1 2 3 4 5 6 7 8 9} 它存储在数组数据(行主顺序)中。但结果是,mat
CUDA\c++
中执行一些计算,然后使用Matlab中的矩阵API(mxCreateNumericArray
)将数组作为矩阵保存到.mat
文件中。在c++
中,我使用本机基于行的索引,但是Matlab
函数采用基于列的顺序。有没有办法快速解决这个问题?我可以将基于行的转换为基于列的,但不想这样做(为了更高的性能)。这里是一段C++代码(带有3x3简单数组):
这里是矩阵
a={1 2 3
4 5 6
7 8 9}
它存储在数组数据(行主顺序)中。但结果是,mattest.mat
文件中的矩阵是
a={1 4 7
2 5 8
3 6 9}
对于对称阵列,快速换位工作。但是我的数组不是对称的,而且比较大 我看到的最简单的方法是直接使用代码,但在MATLAB中转置矩阵(基本上,转置矩阵是在MATLAB中进行的,它只是改变了“视图”)
< >否则,更改C++中存储矩阵的方式,并对<代码>(i,j)< /C>元素> <代码> Mat [i+j*nReave] /代码>,这样您就可以有效地以列的主要顺序编写它。
顺便说一句,没有其他“直接”的方法可以使用类似于mx的函数,并从C/C++的行主顺序更改为列主顺序。我看到的最简单的方法就是直接使用代码,但在MATLAB中转置矩阵(基本上,转置它在MATLAB中是惰性的,它只是改变了“视图”)
< >否则,更改C++中存储矩阵的方式,并对<代码>(i,j)< /C>元素> <代码> Mat [i+j*nReave] /代码>,这样您就可以有效地以列的主要顺序编写它。
顺便说一句,没有其他“直接”的方法可以使用类似于mx的函数,并从C/C++的行主顺序更改为列主顺序。我看到的最简单的方法就是直接使用代码,但在MATLAB中转置矩阵(基本上,转置它在MATLAB中是惰性的,它只是改变了“视图”)
< >否则,更改C++中存储矩阵的方式,并对<代码>(i,j)< /C>元素> <代码> Mat [i+j*nReave] /代码>,这样您就可以有效地以列的主要顺序编写它。
顺便说一句,没有其他“直接”的方法可以使用类似于mx的函数,并从C/C++的行主顺序更改为列主顺序。我看到的最简单的方法就是直接使用代码,但在MATLAB中转置矩阵(基本上,转置它在MATLAB中是惰性的,它只是改变了“视图”)
< >否则,更改C++中存储矩阵的方式,并对<代码>(i,j)< /C>元素> <代码> Mat [i+j*nReave] /代码>,这样您就可以有效地以列的主要顺序编写它。
顺便说一句,没有其他“直接”方法可以使用类似于mx的函数,从C/C++的行主顺序更改为列主顺序。这是正确的+1.另一种方法(我有时会这样做)是malloc
在我的MEX代码中增加行主内存,然后使用列主索引复制元素,以便分配的内存变为行主内存。完成后,我使用行主索引。这允许我使用C/C++代码,该代码是为与MATLAB接口的行主数组而设计的。@rayryeng技巧不错,可能比使用指针算术hanks快一点,是的。我没有写我的矩阵不是正方形。但我刚刚发现,如果我将(M1xM2)以行主顺序存储的数组写入到(M2xM1)以列主顺序存储的数组中,我可以简单地在之后转置它。这是正确的+1.另一种方法(我有时会这样做)是malloc
在我的MEX代码中增加行主内存,然后使用列主索引复制元素,以便分配的内存变为行主内存。完成后,我使用行主索引。这允许我使用C/C++代码,该代码是为与MATLAB接口的行主数组而设计的。@rayryeng技巧不错,可能比使用指针算术hanks快一点,是的。我没有写我的矩阵不是正方形。但我刚刚发现,如果我将(M1xM2)以行主顺序存储的数组写入到(M2xM1)以列主顺序存储的数组中,我可以简单地在之后转置它。这是正确的+1.另一种方法(我有时会这样做)是malloc
在我的MEX代码中增加行主内存,然后使用列主索引复制元素,以便分配的内存变为行主内存。完成后,我使用行主索引。这允许我使用C/C++代码,该代码是为与MATLAB接口的行主数组而设计的。@rayryeng技巧不错,可能比使用指针算术hanks快一点,是的。我没有写我的矩阵不是正方形。但我刚刚发现,如果我将(M1xM2)以行主顺序存储的数组写入到(M2xM1)以列主顺序存储的数组中,我可以简单地在之后转置它。这是正确的+1.另一种方法(我有时会这样做)是malloc
在我的MEX代码中增加行主内存,然后使用列主索引复制元素,以便分配的内存变为行主内存。完成后,我使用行主索引。这允许我使用C/C++代码,该代码是为与MATLAB接口的行主数组而设计的。@rayryeng技巧不错,可能比使用指针算术hanks快一点,是的。我没有写我的矩阵不是正方形。但我刚刚发现,如果我将(M1xM2)以行主顺序存储的数组写入(M2xM1)以列主顺序存储的数组中,我可以在之后简单地将其转置。
a={1 4 7
2 5 8
3 6 9}