nest loop
显示 更早的评论
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 个评论
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?
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.
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.
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!
I found it by using methods(@i)
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!选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 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)
