mwArray的用法

2024-01-15 15:08
文章标签 用法 mwarray

本文主要是介绍mwArray的用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 mwArray :C++用它向MATLAB传递输 i/o 参数。MATLAB中的参数都是矩阵表示,哪怕是1*1的矩阵。

 1)构造函数

  mwArray(mwSize num_rows, const mwSize num_cols, mxClassID mxID,mxComplexity cmplx = mxREAL)

  num_rows :行数; num_cols :列数;mxID:The data type type of the matrix.: cmplx:The complexity of the matrix (numeric types only).

   mwArray a(2, 2, mxDOUBLE_CLASS);

   mwArray b(3, 3, mxSINGLE_CLASS, mxCOMPLEX);

   mwArray c(2, 3, mxCELL_CLASS); 

    mwArray(mwSize num_rows, mwSize num_cols, mxClassID mxID,mxComplexity cmplx = mxREAL)

     mwArray(const char* str)

   mwArray(mwSize num_strings, const char** str)

mwArray(mwSize num_rows, mwSize num_cols, int num_fields,const char** fieldnames)

mwArray(mwSize num_dims, const mwSize* dims, int num_fields,const char** fieldnames)

mwArray(const mwArray& arr)

mwArray( re)

mwArray( re, im)

2) 方法

 

mwArray SharedCopy() const

mwArray Serialize() const

mxClassID ClassID() const

int ElementSize() const

size_t ElementSize() const

mwSize NumberOfElements() const

mwSize NumberOfNonZeros() const

mwSize MaximumNonZeros() const

mwSize NumberOfDimensions() const

int NumberOfFields() const

mwString GetFieldName(int index)

mwArray GetDimensions() const

bool IsEmpty() const

bool IsSparse() const

bool IsNumeric() const

bool IsComplex() const

bool Equals(const mwArray& arr) const

int CompareTo(const mwArray& arr) const

int HashCode() const

mwString ToString() const

mwArray RowIndex() const

mwArray ColumnIndex() const

void MakeComplex()

mwArray Get(mwSize num_indices, ...)

mwArray Get(const char* name, mwSize num_indices, ...)

mwArray Get(mwSize num_indices, const mwIndex* index)

mwArray Get(const char* name, mwSize num_indices, const mwIndex*index)

      #include "mclcppclass.h"

      double data[4] = {1.0, 2.0, 3.0, 4.0};

      double x;

       mwArray a(2, 2, mxDOUBLE_CLASS);

      a.SetData(data, 4);

      x = a.Get(1,1); // x = 1.0

       x = a.Get(2, 1, 2); // x = 3.0

       x = a.Get(2, 2, 2); // x = 4.0

 

 

mwArray Real()

mwArray Imag()

void Set(const mwArray& arr)

void GetData(* buffer, mwSize len) const

void GetLogicalData(mxLogical* buffer, mwSize len) const

void GetCharData(mxChar* buffer, mwSize len) const

void SetData(* buffer, mwSize len)

     #include "mclcppclass.h"

     double rdata[4] = {1.0, 2.0, 3.0, 4.0};

     double data_copy[4] ;

     mwArray a(2, 2, mxDOUBLE_CLASS);

     a.SetData(rdata, 4);

     a.GetData(data_copy, 4);  // 取出a中的数据。

void SetLogicalData(mxLogical* buffer, mwSize len)

void SetCharData(mxChar* buffer, mwSize len)

4.  mwArray 与 mxArray的用法区别:

Seventy
http://www.simwe.com/forum/post/view?bid=19&id=361497&sty=1&tpg=7&age=100

首先,mxArray是Matlab C 函数库的结构体,而mwArray是Matlab C++ 函数库中对mxArray的包装类。
其次,二者的内存管理方式不同。mxArray的内存管理方式比较松散,由于是C函数库,没有数据封装,必须对临时阵列和约束阵列的概念极为明确,并且须小心地防止内存泄漏(要多写好多代码)。尽管有自动内存管理机制(mlfEnterNewContext,mlfReleasePreviousContext),仍然要处处调用mlfAssign,麻烦得很。然而mwArray就好的多,一切交给C++对象去搞定,你只要放心地用就可以了。不过Matlab C++函数库为了防止频繁内存分配和释放重写了内存分配和释放等函数。你会发现对于mwArray a,b; a=b;实际上并没有生成两个相同数据块,只是指针,只有发成数据改变时才copy完整数据。
再次,这两个东西各自有一套与之相对应的函数。函数的返回值类型不同,需要多加注意。
最后,用的时候mxArray要使用指针,而mwArray直接当类对象使。如果你不是Hardcore级的牛人或具有Hardcore倾向的潜牛人,我强烈建议你使用后者!

举一个简单的例子:如果你需要计算c=a+b那么两者的区别是这样的:

mxArray:
void fun(){
……
double d_a=1,d_b=2;
mxArray *a,*b,*c;
mlfEnterNewContext(0,0);
mlfAssign(&a,mlfScalar(d_a));
mlfAssign(&b,mlfScalar(d_b));
mlfAssign(&c,mlfPlus(a,b));
……
mlfReleasePreviousContext(0,0);
mxDestroyArray(a);
mxDestroyArray(b);
mxDestroyArray(c);
}

mwArray:
void fun(){
……
mwArray a,b,c;
a=1;
b=2;
c=a+b;
……
}

这篇关于mwArray的用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609305

相关文章

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的