mx_2_mat

本文深入探讨了Matlab与C++在处理矩阵时的存储方式差异,并提供了将Matlab矩阵转换为C++矩阵的具体函数实现。详细解释了两种编程语言如何在内存中组织相同数据,以及如何通过编程技巧实现数据格式间的无缝转换。

在矩阵存储上,matlab是按列存储,c++是按行存储,含义如下:

矩阵mat:

    1  3  2

    0  4  5

在内存中都是字节相连存储的,

matlab存储格式是:103425

c++存储格式是:132045

matlab矩阵转换为c++矩阵如下函数所示:

void mx_2_mat(const mxArray* mx,Mat &mat)

{
double* db;
if (!mxIsEmpty(mx))
db = mxGetPr(mx);
else
return;

CvMat *pMat = cvCreateMatHeader(mxGetN(mx),mxGetM(mx),CV_64FC1);// mxGetN(mx) = 3,mxGetM(mx)=2
cvSetData(pMat,db,pMat->step);
mat = cvarrToMat(pMat,true);
mat = mat.t();
cvReleaseMat(&pMat);
}
熵权法确定指标权重: 构造评价矩阵 Y_mn=[■(y_11&y_12&…&y_1n@y_21&y_22&…&y_2n@⋮&⋮&⋱&⋮@y_m1&y_m2&⋯&y_mn )] 评价矩阵标准化处理 在数据分析过程中,为处理不同指标值的量纲差异问题,可运用线性比例变换法对评价矩阵实施初等变换,进而获取归一化矩阵。借助这种方式,能够有效解决不同指标值因性质、量级不同而难以直接比较的同质化难题。 指标可分为正向指标负向指标两类,尽管二者的数值表现形式有所不同,但均具有绝对值越大越优的特性。例如,在考量指标重要性权重值的关联时,权重值越大,表明该指标的重要性越强,基于此特性,此类指标应选择作为正向指标。 正向指标(越大越好): y_ij=( x_ij -〖min〗_1≤k≤mx_kj)/( 〖max〗_1≤k≤mx_kj -〖min〗_1≤k≤mx_kj ) 负向指标(越小越好): y_ij=(〖max〗_1≤k≤mx_kj -x_ij )/(〖max〗_1≤k≤mx_kj -〖min〗_1≤k≤mx_kj x) 为消除零值,可添加极小量 ϵ(如 10^(-6)): y_ij, y_ij+ ϵ 注:y_ij——评价矩阵原始值 计算指标权重: 计算第 j项指标下第i个样本值占该指标j的比重 q_ij= y_ij/(∑_(i=1)^m y_ij ) 满足∑_(i=1)^m q_ij=1. 注:m总样本数 计算指标信息熵值M_j M_j=-1/(ln m) ∑_(i=1)^m q_ij ln⁡〖q_ij 〗 当q_ij均等时(q_ij=1/m),熵最大:M_j=1. 当q_ij=1其余为0时,熵最小:M_j=0. 计算差异系数g_j 差异系数g_j反映指标的信息量: g_j=1-M_j 注:g_j越大,指标的信息量越大,权重应更高. 归一化确定权重N_j 权重 N_j通过归一化差异系数得到: N_j=g_j/(∑_(j=1)^n g_j ) 满足∑_(j=1)^n N_j=1. 生成相关代码
04-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhang11wu4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值