How to find the find the pattern in each row of Matrix?

6 次查看(过去 30 天)
Hallo, Thanks for reading!
The array that I am working with consist of 8 column.
1 2 3 4 5 6 7 8
==========================================================
0 3.2 0 3.3 0 2 19 0
3.2 0 3.2 0 3.3 0 2 0
0 0 6.2 0 0 8 21 0
3.2 9 3.2 0 0 0 2 0
...
The goals is to find the column number which are non-zeros. For example: row1 = 2468, row2 = 1357, row3= 367 so on. With these I would like finally find out what is the most frequent pattern.
The current code is
for i=1:length(data)
k(i,:)= find(data(i,:)~=0);
end
However, my array is inconsistent how to solve this problem? Returning the following error:
Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.

采纳的回答

Kazi Alam
Kazi Alam 2021-6-10
编辑:Kazi Alam 2021-6-10
Already found a better option!
Here is the code.
for i=1:length(outerwall)
k(:,i)= str2double(sprintf('%d',find(outerwall(i,:)~=0)));
end
Edit:
for more info
  1 个评论
Adam Danz
Adam Danz 2021-6-10
编辑:Adam Danz 2021-6-10
This solution is bad for two reasons.
  1. Is very inefficient. It converts vectors to strings, then back to a numbers, and uses a loop, all of which can be avoided.
  2. Most importantly, this method will fail if there are more than 9 columns. Example: let's say the pattern in row j is [1 3] and the pattern in row k is [13]. That produces the same output "13" even though the 2 patterns have no overlap at all. Another example: what columns are represented by '123'? [1 2 3] or [1, 23] or [123]?
dpb's answer is much more efficient, cleaner, quicker, and robust.

请先登录,再进行评论。

更多回答(1 个)

dpb
dpb 2021-6-10
A=[A;A(3,:)]; % make sure one row has same pattern
% the engine
B=(A~=0); % convert to logical array for pattern, independent of value
[~,ib]=ismember(B,unique(B,'rows'),'rows'); % locations of each pattern
N=histcounts(ib); % count number of each pattern located
For the above augmented, array, this returns
>> N
N =
2 1 1 1
>>
which shows the first row was duplicated; all rest were unique, only occurring once.

类别

Help CenterFile Exchange 中查找有关 Multidimensional Arrays 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by