Count Unique Occurrences of Elements
1 回表示 (過去 30 日間)
古いコメントを表示
Patrick Rungrugeecharoen
2019 年 5 月 26 日
コメント済み: Patrick Rungrugeecharoen
2019 年 5 月 27 日
I have the following vectors:
Stops = [w w x x x y z ] %String
Buses = [A B C A C D B] % String
UniqueBuses = [A B C D] %String
I would like to have an output which tells me that:
Stop w has 1 A, 1 B.
Stop x has 2 C, 1 A.
Stop y has 1 D.
Stotp z has 1B.
Any help would be appreciated thank you!
0 件のコメント
採用された回答
per isakson
2019 年 5 月 26 日
編集済み: per isakson
2019 年 5 月 26 日
Try this
%%
Stops = [ "w", "w", "x", "x", "x", "y", "z" ]; % String
Buses = [ "A", "B", "C", "A", "C", "D", "B" ]; % String
UniqueBuses = [ "A", "B", "C", "D" ]; % String
%%
UniqueStops = unique( Stops );
for stop = UniqueStops
ism = ismember( Stops, stop );
stopping_buses = Buses( ism );
str = compose( "Stop %s has", stop );
for bus = UniqueBuses
num = sum( double( ismember( stopping_buses, bus ) ) );
if num >= 1
str = compose( "%s %d %s,", str, num, bus );
end
end
disp( str )
end
it outputs
Stop w has 1 A, 1 B,
Stop x has 1 A, 2 C,
Stop y has 1 D,
Stop z has 1 B,
>>
3 件のコメント
per isakson
2019 年 5 月 26 日
編集済み: per isakson
2019 年 5 月 26 日
Questions
- Stops, Buses and UniqueBuses are all of them rows, i.e not columns?
- Are you comfortable with Matlabs debugging tools? If not see Debug a MATLAB Program
Proposal
- Set Pause on Errors
- Run the script with your larger dataset
- When the execution halts before throwing the error inspect the values of str, num, bus. Does their dimensions agree? They shall all be <1x1>
Patrick Rungrugeecharoen
2019 年 5 月 26 日
To answer your question:
- The Stops, Buses and UniqueBuses are all vector columns actually. (Not familiar with MATLAB vector notation - sorry for the confusion).
The str, num and bus dimensions do not agree:
- str is a 1994 x 1 string.
- num is a 1 x 1 double.
- bus is a 251 x 1 string.
My larger data set was (if that helps):
- Stop is 5632 x 1 string.
- Buses is a 5632 x 1 string.
- UniqueBuses is a 251 x 1 string.
- UniqueStops is a 1994 x 1 string.
If it helps the output can just be a matrix form instead of string form?
その他の回答 (1 件)
per isakson
2019 年 5 月 26 日
編集済み: per isakson
2019 年 5 月 26 日
I cannot make comments, thus I use an Answer
To ensure that Stops, Buses and UniqueBuses are row vectors add the following lines in the top of the script
Stops = reshape( Stops, 1,[] );
Buses = reshape( Buses, 1,[] );
UniqueBuses = reshape( UniqueBuses, 1,[] );
"If it helps the output can just be a matrix form instead of string form?" Not needed. These reshape() statements should solve the problem. They output row vectors for both row and column vectors.
1 件のコメント
Patrick Rungrugeecharoen
2019 年 5 月 27 日
Thank you very much it works now.
Out of curiosity how would the code look if I wanted a header row consisting of UniqueBuses and the leading column to have UniqueStops then the matrix filled out with a bunch of numbers based on these results?
参考
カテゴリ
Help Center および File Exchange で Multidimensional Arrays についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!