nest loop
現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
古いコメントを表示
0 投票
Hello,
Here is my code:-
clear all
x = 1:3;
y = 1:3;
a = 1:3;
b = 1:3;
for i = 1:3;
for j = 1:3;
a_pred = a(:,i);
b_pred = b(:,j);
y_pred = a_pred + b_pred.* x;
chi2 = (y-y_pred).^2;
end
end
how would I amend the nested loop so that every single combination of a and b values are calculated in y_pred please? i.e. a(1) and b(1) then a(2) and b(1) all the way to a(3) and b(3).
Thanks
採用された回答
Matt Fig
2011 年 3 月 29 日
Why do you think all aren't being calculated? Here is a modified version of your code, not changing the mechanics, which shows what you are getting.
a = 1:3;
b = 1:3;
for i = 1:3;
for j = 1:3;
a_pred = a(:,i);
b_pred = b(:,j);
disp([a_pred b_pred])
end
end
.
.
EDIT
.
Here is how to store all the results in chi2:
x = 1:3;
y = 1:3;
a = 1:3;
b = 1:3;
chi2 = zeros(9,3);
cnt = 0;
for i = 1:3;
for j = 1:3;
cnt = cnt + 1;
a_pred = a(:,i);
b_pred = b(:,j);
y_pred = a_pred + b_pred.* x
chi2(cnt,:) = (y-y_pred).^2;
end
end
chi2
IDX = npermutek(1:3,2);
y_pred = bsxfun(@plus,a(IDX(:,1)), bsxfun(@times,b(IDX(:,2)),x.'));
chi2 = bsxfun(@minus,y,y_pred.').^2
Not that it should be faster here...
11 件のコメント
Dominic Lawson
2011 年 3 月 29 日
Dear Matt,
Thanks for getting back to me so quickly. Is it the case they are being calculated but are being over written and not stored in a matrix? The [] help store the numbers in a matrix?
Walter Roberson
2011 年 3 月 29 日
chi2(i,j) = (y-y_pred).^2;
Matt Fig
2011 年 3 月 29 日
As Walter shows, you are overwriting chi2 every loop iteration. For best results, pre-allocate your chi2 matrix before the loops.
chi2 = zeros(3);
for ...
for ..
...
...
chi2(i,j) = ...
end
end
Also, I recommend you get in the practice of _not_ using i and j as loop indices as they will mask the built-in MATLAB functions i and j.
Walter Roberson
2011 年 3 月 29 日
To nit-pick: the built-in values for i and j are variables, not functions.
Matt Fig
2011 年 3 月 29 日
But, they are functions too!
which i
which j
Also, see the help...
Matt Fig
2011 年 3 月 29 日
Actually, since (y-y_pred).^2 is a row vector, storing in chi2(i,j) will not work. You will have to use a cell array and/or do some fancy indexing to save all these rows. See my edit above.
Walter Roberson
2011 年 3 月 29 日
You are right, Matt. I got confused because class(i) returns 'double'. But of course with them being functions, naming them is equivalent to invoking them with no arguments, so that is what is done when I ask for the class.
Another way to see that it is built in is,
functions(@i)
the "file" field of which reads 'MATLAB built-in function' which would not be the case if i was a plain variable.
Matt Fig
2011 年 3 月 29 日
I didn't know about the FUNCTIONS function, thanks Walter. That could come in handy!
Matt Fig
2011 年 3 月 29 日
BTW, what does the second field, 'type' mean here? I see REPMAT is simple, so is PLOT!
Walter Roberson
2011 年 3 月 29 日
I found it by using methods(@i)
Walter Roberson
2011 年 3 月 29 日
Good question about 'type'. I was not able to find anything that did not indicate 'simple' there. I did find, though, that functions will use an empty file name for methods that do not have a file of their own. For example, functions(@func2str) where which shows func2str as if it is part of a file that does not actually exist.
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Performance and Memory についてさらに検索
タグ
参考
2011 年 3 月 29 日
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)
