- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 mex.h
将我编写的 c++ 程序转换为 Matlab 命令的 header ,但我不明白它们的 mxArray 结构是如何工作的。
假设我有一个 std::vector<float>
称为 data
我想转换为 mxArray 我可以返回到 matlab,我必须做这样的事情对吗?
mxSetData(plhs[0], static_cast<void*>(&(*(data.begin()))));
mxSetN(plhs[0], data.size());
mxSetM(plhs[0], 1);
但是 matlab 怎么知道 mxClassID
的 mxArray
我要发的是mxSINGLE_CLASS
?为什么我不应该使用 mxSetData
对于双重数据?为什么不 mxSetClassID
存在吗?
最佳答案
看来您需要将plhs[0]
预定义为float
类型,然后设置指针。
plhs[0] = mxCreateNumericMatrix( 1, data.size(), mxSINGLE_CLASS, mxREAL );
void* oldAllocation = mxGetData( plhs[0] ); // for de-allocation
mxSetData(plhs[0], static_cast<void*>(&(*(data.begin()))));
mxFree( oldAllocation );
顺便说一句,您确定 data
在堆上并且不会在您的 mex 函数终止时被取消分配吗?
或者,如果数据
不是太大,你可以简单地将它复制到plhs[0]
(我通常这样做)
plhs[0] = mxCreateNumericMatrix( 1, data.size(), mxSINGLE_CLASS, mxREAL );
float* dst = (float*)mxGetData( plhs[0] );
for ( int i = 0 ; i < data.size(); i++ ) {
dst[i] = data[i];
}
// or use memcpy instead of the loop
关于c++ - 如何设置填充有 mxSetData 的 mxArray 的 classID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24680025/
我正在尝试从 C 代码调用 matlab 函数,尝试遵循我可以通过网络获得的任何信息。我正在使用在 Ubuntu 14.04 上运行的 matlab 版本 R2014a。假设函数 testfun.m
我正在尝试使用函数 mexCallMATLAB 作为 described here . 但是,我总共有 4 个输入参数,因此我通过这样做创建了一个 mxArray mxArray *funcInput
我遇到了一些指针困惑: 我有一些(数值配方)C 函数 fitexy(in, &out),我想将其编译为 .mex 文件以从 matlab 调用它。但是,我无法让网关例程访问out的指针,以便将其传递给
我喜欢使用 mexEvalString 因为它很容易在 mex 中执行。但是,我得到了一些命令的异常,所以我想使用 mexEvalStringWithTrap 捕获它们以查看发生了什么,但我无法从异常
我需要在 mex 函数中计算一些变量的散列函数。特别是我需要处理一个 24x1 geopoint 的变量 vector 。为此,我需要检查它的类,因为可能有任何变量作为输入,所以我使用 mxGetCl
好吧,伙计们,我感觉自己好像掉进了兔子洞...... 为了构建一个作为 Matlab-Mex 的接口(interface)来接收由复杂的 C 结构组成的多个不同消息,我想在不同的函数中创建相应的 Me
这就是我要实现的目标: MATFile *file = matOpen(this->filename.c_str(),"r"); mxArray *roadstruct = matGetVariabl
我正在为 Matlab 处理一个巨大的矩阵(超过 20.000x20.000 double )的文件。我想在完成计算后,将作为本征矩阵处理的结果矩阵映射到 mxArray,而无需内存复制和在内存上分配
我有 MATLAB mex 代码,可以侵入 mxArray header 以读取和修改诸如 CrossLink 指针(用于共享数据副本)等字段。这对于允许我在 mex 例程中处理非常大的变量而无需创建
我尝试使用 VS 2010 MATLAB 2012b MEX 代码段并收到此错误 c:\users\krzysztof\desktop\libocas_v096\libocas_v096\sparse
我经常通过在 mex 中实现来优化一些 matlab 例程。到目前为止这工作正常 - 但每当创建返回 mxArray 时,它都会在我使用 mxCreateNumericArray 构建它时进行预初始化
我想在 C++ 代码中使用“engine.h”将矩阵发送到 Matlab。事实上,我在 cv::Mat 中有数据,我需要发送一个 mxArray。我尝试使用这个表达式,但它不起作用: cv::Mat
我使用 mex 在 matlab 中得到了一个典型的 cpp 函数 #include "mex.h" void func (int * rowvec, int * colvec, float * va
我正在为 Matlab 编写一个 mex 函数,并在编译期间注意到来自 Visual Studio 2017 的警告。在几乎删除除包含的所有内容和 mex 函数的裸包装器之后,我不得不得出结论,警告实
我正在尝试使用 mex.h将我编写的 c++ 程序转换为 Matlab 命令的 header ,但我不明白它们的 mxArray 结构是如何工作的。 假设我有一个 std::vector称为 data
我们一直在与从 Matlab 编译器创建的库进行交互。我们的问题与从库返回的数组有关。 一旦我们完成数组,我们想释放内存,但是,这样做偶尔会导致段错误。 这是 Matlab 库 (bugtest.m)
我想在 Eigen 矩阵/vector 和 mex 数组之间传递数据。在下面的代码中,我定义了一个名为 y_output 的 mex 数组,其中包含一个元胞数组。变量 y_output 将传递给 MA
我正在编写打开 Matlab API 引擎的 C++ 代码。在演示文件 Matlab_ROOT/extern/examples/eng_mat/engdemo.cpp 中,它展示了如何将简单的一维 c
我有一个数据的相关矩阵,我想使用 pca 将它们转换为不相关的集合。 所以我决定使用 matlab 引擎(c++ mex API)来执行 pca 我的问题是如何有效地将矩阵内容复制到 mxArray我
我有以下 C++ vector : std::vector myVec; 其中 myStruct 包含: struct myStruct { Point3D start; Point3D en
我是一名优秀的程序员,十分优秀!