您的位置:首页 > 编程语言 > MATLAB

MATLAB:1 matlab 与 c++ 数据存储的差异

2016-01-18 16:20 381 查看

Matlab和Fortran一样,都是优先的. 与之相反的是C++, 是优先的.

原因:数学计算里面很多情况下是要将矩阵看成列向量组。

举例:常见的sum和mean函数

sum()函数:默认列优先

B=sum(A) 对于矩阵A进行每列求和
B=sum(A,dim) 如果dim = 1 对于矩阵A进行每列求和
如果dim = 2 对于矩阵A进行每行就和

B=sum(A,'double')
B=sum(A,'native')
B=sum(A,dim,'double')
B=sum(A,dim,'native') 中的doulbe和native都是对于返回数据类型进行特别的说明

B=sum(A(:))是对矩阵进行全矩阵数值求和。

必须注意一点的是,如果你的矩阵数据类型是cell等无法进行直接求和的数据类型,需要对数据进行预处理。我常遇到的是cell2mat(A)。这样,就可以求和了!


mean()函数

M = mean(A)
如果A是一个向量,mean(A)返回A中元素的平均值。
如果A是一个矩阵,mean(A)将其中的各列视为向量,把矩阵中的每列看成一个向量,返回一个包含每一列所有元素的平均值的行向量。
如果A是一个多元数组,mean(A)将数组中第一个非单一维的值看成一个向量,返回每个向量的平均值。

M = mean(A,dim)
对于矩阵,mean(A,1)就是包含每一列的平均值的行向量。
对于矩阵,mean(A,2)就是包含每一行的平均值的列向量。

A = [1 2 3; 3 3 6; 4 6 8; 4 7 7];
mean(A)
ans =
3.0000 4.5000 6.0000

mean(A,2)
ans =
2.0000
4.0000

6.0000
6.0000
mean(A)
当A为向量时,那么返回值为该向量所有元素的均值
当A为矩阵时,那么返回值为该矩阵各列向量的均值
mean(A,2)
返回值为该矩阵的各行向量的均值


MATLAB: bin文件的写入与读取

# matlab生成的bin文件(因为用于C++使用,所以转置保存了。。。)
close all;clear all;clc;
B = randn(5);
fid = fopen('test.bin','wb');
fwrite(fid,B','double');
fclose(fid);


# matlab读取bin
close all;clear all;clc;
fid = fopen('test.bin','rb');
A = fread(fid,[5,5]'double');
fclose(fid);


C++: bin文件的写入与读取

待完成。。。

libsvm3.11+3.20(及以后版本)安装

具体步骤:

1.File->set path ->add with subfolders->加入libsvm-3.11/3.20文件夹的解压路径(就是你下载好的主文件夹路径 里面包含matlab,Python,windows等子文件夹的那个)

2.
mex -setup


3.将matlab当前目录切换到 *:****\libsvm-3.20\matlab

make


4.检验安装是否正确

a.如果你装的是libsvm3.11的话

加载数据方法是,训练和预测方法是:

load heart_scale;
model = svmtrain(heart_scale_label,heart_scale_inst);
[predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model);


b.如果你装的是libsvm-3.20的话

加载数据方法是,训练和预测方法是:

[heart_scale_label,heart_scale_inst]= libsvmread('heart_scale');
model = svmtrain(heart_scale_label,heart_scale_inst);
[predict_label,accuracy,decision_values] = svmpredict(heart_scale_label,heart_scale_inst,model,1);


之所以有区别是因为在libsvm3.11中的heart_scale的格式是mat,matlab可以直接load的,训练和测试的方法也比较老版。

而在libsvm3.20中heart_scale的数据格式是c++版的,matlab需要转换一下才可以使用,加载数据要用libsvmread函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: