how to create a for loop 380:780?
現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
古いコメントを表示
Hi,
how can I create a for loop between in this statement
CM4_380 = spec_data(spec_data.wavelength>380 & spec_data.wavelength<381,:);
so it for loops between 380:780? Basically, to make this:
CM4_381 = spec_data(spec_data.wavelength>381 & spec_data.wavelength<382,:);
CM4_382 = spec_data(spec_data.wavelength>382 & spec_data.wavelength<383,:);
CM4_383 = spec_data(spec_data.wavelength>383 & spec_data.wavelength<384,:);
etc. Plus I need to save each of those tables.
Thank you for your help!
採用された回答
the cyclist
2019 年 9 月 13 日
I would use a cell array, not variable names that also encode an index:
for ic = 380:780
CM4{ic} = spec_data(spec_data.wavelength>ic & spec_data.wavelength<(ic+1),:);
end
10 件のコメント
not working
the cyclist
2019 年 9 月 13 日
Well, given the tiny amount of information you gave in your question, I would say that it certainly does work.
spec_data = struct('wavelength',381.5);
for ic = 380:780
CM4{ic} = spec_data(spec_data.wavelength>ic & spec_data.wavelength<(ic+1),:);
end
That code results in exactly what I would expect.
So, instead of just saying "not working", it would be better if you gave more context, uploaded your full code (or at least a portion that we can run), and the full text of any error message you are getting.
Sorry. Here is my entire code:
load raw_CM4_19.mat
numfiles = length(txtFiles);
spec_data = [];
for k = 1:numfiles
spec = table(txtFiles(k).wavelength,txtFiles(k).irradiance,'VariableNames',{'wavelength','irradiance'});
spec = spec(spec.wavelength>380 & spec.wavelength<781,:);
spec_data = vertcat(spec_data,spec);
end
for ic = 380:780
CM4{ic} = spec_data(spec_data.wavelength>ic & spec_data.wavelength<(ic+1),:);
end
the cyclist
2019 年 9 月 13 日
I see that my code does indeed give an error here. But for the MAT file you uploaded, spec_data is empty, because numfiles is 0, because txtFiles is empty.
So, it's not a good test case, it seems.
vicsm
2019 年 9 月 13 日
Well, that's weird because for me it's working just fine...spec_data is 54672x2, because numfiles is 48, because txtFiles is a 48x1 structure.
the cyclist
2019 年 9 月 13 日
Are you sure you uploaded the file you intended to? In your code, it is called raw_CM_19.mat, but the file you uploaded is raw_CM4_19.mat.
vicsm
2019 年 9 月 13 日
Thank you for noticing. Indeed, I uploaded the wrong one. Comment edited!
the cyclist
2019 年 9 月 13 日
So, is there still a problem? Your code runs to completion for me, and fills in the cells I would expect.
Walter Roberson
2019 年 9 月 13 日
I would suggest
for ic = 380:780
CM4{ic-380+1} = spec_data(spec_data.wavelength>ic & spec_data.wavelength<(ic+1),:);
end
unless you have a use for CM4{1} to CM4{379}
vicsm
2019 年 9 月 13 日
I does work, thank you!
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索
タグ
参考
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)
