Matlab:矩阵没有循环更新

时间:2014-10-25 19:57:57

标签: matlab

我是matlab的新手。我有一个数组,我在矩阵中找到min元素,然后将矩阵的相应行和列设为1.在第一个循环中,它工作正常但是对于下一个循环,矩阵没有得到更新。

代码:

data=[1.00000000 0.53137106 0.85595882 0.66829640 0.23856533 0.45405844 0.54347968 0.56774586 0.23837982 0.62409687; 
0.53137106 1.00000000 0.28491443 0.83557534 0.58327866 0.53124779 0.18295255 0.30800611 0.88819402 0.82852000 ;
0.85595882 0.28491443 1.00000000 0.88712496 0.53283900 0.93776625 0.18187943 0.25401449 0.46880579 0.86628407 ;
0.66829640 0.83557534 0.88712496 1.00000000 0.73516506 0.32148027 0.87524909 0.85505933 0.72357458 0.09848434 ;
0.23856533 0.58327866 0.53283900 0.73516506 1.00000000 0.70343286 0.51693362 0.51673573 0.27955368 0.72713149 ;
0.45405844 0.53124779 0.93776625 0.32148027 0.70343286 1.00000000 0.68939388 0.84967077 0.40466678 0.31867197 ;
0.54347968 0.18295255 0.18187943 0.87524909 0.51693362 0.68939388 1.00000000 0.21098818 0.86957568 0.86703879 ;
0.56774586 0.30800611 0.25401449 0.85505933 0.51673573 0.84967077 0.21098818 1.00000000 0.79130369 0.81940556 ;
0.23837982 0.88819402 0.46880579 0.72357458 0.27955368 0.40466678 0.86957568 0.79130369 1.00000000 0.88794363 ;
0.62409687 0.82852000 0.86628407 0.09848434 0.72713149 0.31867197 0.86703879 0.81940556 0.88794363 1.00000000 ];
ptr=1;

for k= 1:9
 k
%find min ele, its row and column no:
[minNumRow, minIndexRow] = min(data);
[minNum, row] = min(minNumRow);
col = minIndexCol(row);
row 
col
minNum
%storing it in cluster array
cluster{ptr}={strcat(int2str(row),', ',int2str(col))};
ptr=ptr+1;
%make eles of merged objects as 1
    for i=1:10
     data(row)=1; 
     row=row+10;
    end
    for i= ((col*10)-10): (col*10)
     data(i)=1;
    end
 data
end

请帮忙!

2 个答案:

答案 0 :(得分:0)

我不确定我是否做对了,但我认为你需要这个,

data = randi(9, [5 5]); % put your data instead
[colData, column] = min(data);
[~, row] = min(colData);
data(:,column(row)) = 1;
data(row,:) = 1;

这会将min的行和列更改为1的值。

答案 1 :(得分:0)

你不需要循环。

根据您的示例数据:

[~, linidx] = min(data(:)); % Returns linear index of minimum
[row, col] = ind2sub(size(data),linidx); % Convert linear index to subscripts

% Set row & column to 1
data(row,:) = 1;
data(:,col) = 1;

有关详细信息,请参阅linear indexingind2sub的文档。主要是:

  

MATLAB存储的矩阵和数组不是它们出现的形状   当在MATLAB命令窗口中显示时,但作为单列   元件。

我们利用data(:)中的min()来获取我们最小值的索引。

编辑:正如Sebastian上面的评论所指出的,如果存在多个相同的最小值,则此方法仅返回第一个的位置。这是min函数固有的行为,因此您必须实现自己的逻辑来查找相同的值(在floating point errors的容差范围内)并根据需要进行修改。