Matlab处理log文件

一般文本类文件都用java或python处理方便很多,此处记录一下matlab 处理文本文件的一些语法。 例如,程序记录下的日志文件为:dl4ss_output.log_2017_03_10_210643,其部分内容为: [Epoch: 1] - SDR:1.308344, SIR:2.063156, SAR:-1.509836, NSDR:2.908430   Epoch 1/1   50/50 [==============================] - 178s - loss: 1.9203 - val_loss: 1.7383   Epoch 1/1   50/50 [==============================] - 176s - loss: 1.6208 - val_loss: 1.5113   Epoch 1/1   50/50 [==============================] - 176s - loss: 1.4212 - val_loss: 1.3334   Epoch 1/1   50/50 [==============================] - 175s - loss: 1.2612 - val_loss: 1.1911   Epoch 1/1   50/50 [==============================] - 176s - loss: 1.1320 - val_loss: 1.0740   [Epoch: 6] - SDR:2.128937, SIR:3.154744, SAR:0.774681, NSDR:3.729023   Epoch 1/1   50/50 [==============================] - 175s - loss: 1.0312 - val_loss: 0.9913   现在想对该日志文件进行处理,并将Epoch迭代过程中评估的结果值绘制成图,方法如下: clc    clear   colours = ’rbckgcmbkgcmbkgcmbgrcmykbgrcmykb’;  % ’bgrcmykw’ modified by jacoxu@msn.com    symbols = ’.x^os*.dvph><x+^os*.dvph><+’;  % ’.ox+*sdv^<>ph’ %参考 http://blog.sina.com.cn/s/blog_618af1950100kdi2.html    linetypes = {‘-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’,’-’};  % {‘-’,’:’,’-.’,’–’}    figureSize = [300,200,500,300];    lineWidth = 1.5;    para_list = {‘SDR’, ’SIR’, ’SAR’, ’NSDR’};       log_file = ’dl4ss_output.log_2017_03_10_210643′;    log_file_fd = fopen(log_file);    epoch_idx = 0;    … 继续阅读

Python下调用Matlab接口

1. 安装Matlab到目录$Matlab_Path 2. 安装Matlab Engine API for Python cd $Matlab_Path/extern/engines/python python setup.py install 3. 在Python中使用 (a). 加载库 import matlab.engine (b). 开启引擎 mat_eng = matlab.engine.start_matlab() (c). 把matlab文件放到当前工程目录下,如’./BSS_EVAL.m’ (d). 如有需要进行tpye转换,如 input = matlab.double(input) (d). 调用BSS_EVAL.m函数 params = mat_eng.BSS_EVAL(input)

libSVM多类别概率输出问题

在libsvm模型进行预测时predict返回的三个参数分别为: -predicted_label:第一个返回值 nx1,表示样本的预测类标号; -accuracy:第二个返回值,1×1,表示分类的正确率; -prob_estimates:第三个返回值,nxk,每一行表示这个样本分别属于每一个类别的概率。 然而,坑来了。。。。 您的程序中所返回的第三个参数中的概率顺序极有可能并不是按照真实的类别0-(k-1)的类别排序的。 注意,是可能。因为大部分情况是正常的,因而查询了很多也没注意到相关介绍,最后在 [这里] 看到相同情况。 此时,才留意到,其实predict返回的概率结果排序是按照标签的输入顺序依次排序的,因而前面的标签会排在前面。 此时可通过model.Label将标签顺序打印出来,并根据此进行重排序 [label,rOrder] = sort(model.Label); predict_scoresR = predict_scores(:,rOrder); 得到正确的顺序 predict_scoresR.

使用Matlab计算各种距离Distance

计算距离的需求有两种:   一种是给定一个特征集合X,然后计算Pairwise距离矩阵,那么可使用D=pdist(X,distance)的方式;   另一种是给定两个对应的特征集合X和Y,然后计算X与Y对应的距离信息,使用D=pdist2(X,Y,distance)的方式; 需注意,2011版本以前的Matlab是没有pdist2.m文件的,而早期的pdist2.m文件中的距离计算方式也比较少,所以建议使用最新的Matlab版本,很重要。 其中,distance的定义有如下几种: 欧几里德距离Euclidean distance(‘euclidean’) 欧氏距离虽然很有用,但也有明显的缺点。 一:它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求。 二:它没有考虑各变量的数量级(量纲),容易犯大数吃小数的毛病。所以,可以先对原始数据进行规范化处理再进行距离计算。 标准欧几里德距离Standardized Euclidean distance(‘seuclidean’) 相比单纯的欧氏距离,标准欧氏距离能够有效的解决上述缺点。注意,这里的V在许多Matlab函数中是可以自己设定的,不一定非得取标准差,可以依据各变量的重要程度设置不同的值,如knnsearch函数中的Scale属性。 马哈拉诺比斯距离Mahalanobis distance(‘mahalanobis’) where C is the covariance matrix. 马氏距离是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧式距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧式距离,如果协方差矩阵为对角阵,则其也可称为正规化的欧氏距离. 马氏优缺点:   1)马氏距离的计算是建立在总体样本的基础上的,因为C是由总样本计算而来,所以马氏距离的计算是不稳定的;   2)在计算马氏距离过程中,要求总体样本数大于样本的维数。   3)协方差矩阵的逆矩阵可能不存在。 曼哈顿距离(城市区块距离)City block metric(‘cityblock’) Notice that the city block distance is … 继续阅读

Matlab多个Figure图合成一个Fig

案例:之前跑过的程序 已经生成了多个matlab图,现在需要进行合并到一个图中。 解决方案,利用图像句柄把figure图像中的参数读入到内存中,然后重新subplot绘制。 程序如下: Code   ViewCopyPrint clc;clear;    open(‘./test_1.fig’)    figure_info=findall(gcf,’type’,’line’);     xdata1 = get(figure_info,’xdata’);    ydata1 = get(figure_info,’ydata’);    color1 = get(figure_info,’color’);    subNum1 = length(xdata1);       open(‘./test_2.fig’)    figure_info=findall(gcf,’type’,’line’);     xdata2 = get(figure_info,’xdata’);    ydata2 = get(figure_info,’ydata’);    color2 = get(figure_info,’color’);    subNum2 = length(xdata2);       open(‘./test_3.fig’)    figure_info=findall(gcf,’type’,’line’);     xdata3 = get(figure_info,’xdata’);    ydata3 = get(figure_info,’ydata’); … 继续阅读

Matlab 2009b win7 64bits编译cpp文件问题

在使用一些matlab程序的时候,总有人喜欢部分代码使用C写,那么我们在运行的时候需要进行编译。 Error: Could not detect a compiler on local system which can compile the specified input file(s) Error using mex 此时,我们需要在matlab命令窗输入: mex -setup 进行安装,但是遇到了问题: >> mex -setup Please choose your compiler for building external interface (MEX) files: Would you like … 继续阅读

设置Matlab图中的legend的线长

注:以下代码版本为Matlab2011,在 2015版上进行测试有问题。 有时候我们想调节Matlab图中的legend的线长以达到更好的可视效果。直接举例,做法如下: plot(1:10,’-*’) legend(‘a’) linesInPlot = findobj(‘type’,’line’); % linesInPlot(2)是线的控制句柄 length_leg = get(linesInPlot(2),’XData’); % 返回的结果为 0.1231 0.7385 length_mid = mean(length_leg); %找到中间点 length_line = (length_leg(end) – length_leg(1))/2; length_chxRatio = 0.5; %!!!想要的线长的调节比,我们设置0.5即表示线长压缩一半 length_leg = [length_mid-length_line*length_chxRatio length_mid+length_line*length_chxRatio]; set(linesInPlot(2),’XData’,length_leg) % 设置更改后的线长 但是此方法仍存在问题就是并没有改变 legend框的大小,有待继续探索。。。

如何在用Matlab画柱状图

画柱状图比较方便的还是Excel,不过作为逼格比较高的我们有必要学习一下如何用Matlab玩转柱状图。 比较好的参考资料: 1. http://blog.sina.com.cn/s/blog_4bc179a80100ki72.html 2. http://blog.csdn.net/hao_ding/article/details/9472103 y=[67.84 68.89 71.54 71.67;67.17 69.47 73.41 73.14]; b=bar(y); grid on; ch = get(b,’children’); set(gca,’XTickLabel’,{‘Dataset 1′,’Dataset 2′}) % 不知道为什么会报错,在Matlab2009,2011测试都不行 % set(ch,’FaceVertexCData’,[1 0 0;0 1 0; 0 0 1; 1 0 1]); legend(‘Fea. 1′,’Fea. 2′,’Fea. 3′,’Fea. … 继续阅读

Matlab之accumarray用好索引矩阵

直接上例子,如果有: val = [1 2 3 4 5]; subs = [1 1 4 2 4]‘; (subs必须为列向量,且必须和val同维度) 那么,A = accumarray(subs, val); 的结果是什么呢? Q: accumarray总体是干嘛的? A: 笼统的说,是用subs向量中的信息从val中提取数值做累加,累加完的结果放到A中。 Q: subs是干嘛的? A: subs是一个累加指示向量。 subs提供的信息由两个: (a). subs向量中的每个位置对应val的每个位置,因而两个向量必须同维度; (b). subs中元素值相同的,val中的对应元素累加,元素值是累加完后放到A的什么地方。 如:上面的例子中,subs(2),subs(4)都是2,所以,val(2)和val(4)累加起来,放到A(2)这个位置上。 Q: val是干嘛的? A: val是提供累加数值的,谁累加呢?就是A中的数值累加。选哪些数进行累加呢?subs向量中数值相同的对应位置的数。累加完后放到哪里呢?放到subs中指示的位置。 Q: … 继续阅读