How to find the find the pattern in each row of Matrix?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Kazi Alam
am 10 Jun. 2021
Bearbeitet: Adam Danz
am 10 Jun. 2021
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.
0 Kommentare
Akzeptierte Antwort
Kazi Alam
am 10 Jun. 2021
Bearbeitet: Kazi Alam
am 10 Jun. 2021
1 Kommentar
Adam Danz
am 10 Jun. 2021
Bearbeitet: Adam Danz
am 10 Jun. 2021
This solution is bad for two reasons.
- Is very inefficient. It converts vectors to strings, then back to a numbers, and uses a loop, all of which can be avoided.
- 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.
Weitere Antworten (1)
dpb
am 10 Jun. 2021
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.
2 Kommentare
Siehe auch
Kategorien
Mehr zu Multidimensional Arrays finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!