最近,需要用MATLAB处理一批数据,数据的格式如下:
如上图所示,在一个文本文件中存储着一个N行8列的矩阵,第一列的取值为-1,0,1.为了将所有含有这三个值的行分别提出出来。使用find函数应该是比较高效的。
find函数语法:
1.
2.
3.
4.
5.
6.
说明:
1.
找出矩阵X中的所有非零元素,并将这些元素的线性索引值(linear indices:按列)返回到向量ind中。
如果X是一个行向量,则ind是一个行向量;否则,ind是一个列向量。
如果X不含非零元素或是一个空矩阵,则ind是一个空矩阵。
2.
返回第一个非零元素k的索引值。
k必须是一个正数,但是它可以是任何数字数值类型。
4.
返回最后一个非零元素k的索引值。
5.
返回矩阵X中非零元素的行和列的索引值。
这个语法对于处理稀疏矩阵尤其有用。
如果X是一个N(N>2)维矩阵,col包括列的线性索引。
例如,一个5*7*3的矩阵X,有一个非零元素X(4,2,3),find函数将返回row=4和col=16。也就是说,(第1 页有7列)+(第2页有7列)+(第3页有2列)=16。
6.
返回X中非零元素的一个列或行向量v,同时返回行和列的索引值。
如果X是一个逻辑表示,则v是一个逻辑矩阵。
输出向量v包含通过评估X表示得到的逻辑矩阵的非零元素。
根据如上的语法原理编写代码如下:
function result = example(dataPath)
%dataPath为data的路径
[pathstrssim, namessim, extssim] = fileparts(dataPath);
%读取数据
[Choice a b c d e f g ] =...
textread(dataPath,'%f%f%f%f%f%f%f%f%f%f%f');
tempMat = [<span style="font-family: SimSun;">Choice a b c d e f g</span>];
%计算矩阵的总数
total = size(Choice,1);
tie = find(tempMat(:,1) == 0);
non_tie = total - size(tie,1);
[Lrow,Lcol V] = find(tempMat(:,1) == -1);
LeftMat1 =tempMat(Lrow,:);
[Rrow,Rcol V] = find(tempMat(:,1) == 1);
RrowMat1 =tempMat(Rrow,:);
result = <span style="font-family: SimSun;">[LeftMat1;RrowMat1];</span>
end