Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用矩阵c\c++;基于行索引的API_C++_Matlab_Matrix - Fatal编程技术网

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}