現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
Extract row elements corresponding to a particular column value and save as new matrix
2 ビュー (過去 30 日間)
古いコメントを表示
Sarah
2013 年 3 月 14 日
I have a Mx4 matrix with the following format:
a1 b1 c d1
a2 b2 c d2
a3 b3 c d3
a4 b4 c1 d4
a5 b5 c1 d5
and what i want to do is create new matrices corresponding to the different c values in the third column renaming this matrix matc.
Any help would be really appreciated Sarah
回答 (2 件)
Azzi Abdelmalek
2013 年 3 月 14 日
編集済み: Azzi Abdelmalek
2013 年 3 月 14 日
b=A(:,3)
b(b==c)=yourvalue
A(:,3)=b
17 件のコメント
Sarah
2013 年 3 月 14 日
Thank you! the values of c are increasing but not monotonically, I would like to create a loop to extract these values corresponding to the different c values. Any ideas on how I might do that?
Sarah
2013 年 3 月 14 日
I do not want to replace them, I just want to extract the data corresponding to the different groups of c values for example create a matrix containing the data corresponding to c1 values and so on.
Sarah
2013 年 3 月 14 日
Also in the code you wrote there the last line just rewrites the variable b with the original matrix again?
Azzi Abdelmalek
2013 年 3 月 14 日
編集済み: Azzi Abdelmalek
2013 年 3 月 14 日
If A=[ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2 3]
What should be the result?
Azzi Abdelmalek
2013 年 3 月 14 日
編集済み: Azzi Abdelmalek
2013 年 3 月 14 日
A=[ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2 3]
A=sortrows(A,3)
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
assignin('base',sprintf('mat%d',c(k)),A(idx,:))
end
%Check the matrices mat2, mat4 and mat7
Sarah
2013 年 3 月 14 日
And because some of the c values are not integers is there a way to round the c value before assigning it to the variable name?
Azzi Abdelmalek
2013 年 3 月 14 日
But if you have three values of c: 1.8, 2 and 2.6 how will you round?
Azzi Abdelmalek
2013 年 3 月 14 日
編集済み: Azzi Abdelmalek
2013 年 3 月 14 日
What I suggest is using cell array
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
out{k}=A(idx,:)
end
then check
out{1}
out{2}
out{3}
Sarah
2013 年 3 月 14 日
I would round to the nearest integer eg 1.8->2 and so on.. Finally to save each matrix, I am unfamiliar with the assignin function. How would I save the individual matrices eg mat11 mat12 and so on..?
Sarah
2013 年 3 月 14 日
I have looked at the various matrices when I round the value c to the nearest integer, it is just saving the matrices within the loop that I am having some difficulty with now.
Azzi Abdelmalek
2013 年 3 月 14 日
編集済み: Azzi Abdelmalek
2013 年 3 月 14 日
Did you check the cell array solution? You do not need to create such variables
Sarah
2013 年 3 月 14 日
You mean I do not need to save the matrices? I would like to save them individually as they are created within the loop.
Azzi Abdelmalek
2013 年 3 月 14 日
Check this :
clear out
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
out{k,2}=A(idx,:)
out{k,1}=c(k)
end
out{1,1}, % is c1
out{1,2} % corresponding to c1
out{2,1}, % is c2
out{2,2} % corresponding to c2
and so on
Sarah
2013 年 3 月 14 日
the matrices are being created correctly with the original code, I only wish to now save each matrix that was created within the loop eg after the assignin('base',sprintf('mat%d',c(k)),A(idx,:)) line. I appreciate your help with this!
Azzi Abdelmalek
2013 年 3 月 14 日
編集済み: Azzi Abdelmalek
2013 年 3 月 14 日
% Check this: for c=2.4 the variable will be mat2p4 instead of mat2.4
A= [ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2.4 3]
A=sortrows(A,3)
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
s=num2str(c(k))
s=strrep(s,'.','p')
assignin('base',['mat' s],A(idx,:))
end
Check the result
mat2p4
mat4
mat7
Sarah
2013 年 3 月 14 日
So the matrix is sorted according to the third column so
A1=[4 2 2 3
2 3 4 6
4 8 7 9
5 2 7 1];
the answers should be
mat2=[4 2 2 3];
mat4=[2 3 4 6];
mat7=[4 8 7 9
5 2 9 1];
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
アジア太平洋地域
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)