Matlab 我需要将3个变量的嵌套for循环转换为n个变量
这是我在Matlab 我需要将3个变量的嵌套for循环转换为n个变量,matlab,Matlab,这是我在Nobj=3时使用变量Pesos的程序。这里我使用3个嵌套的for循环来计算比索,但是我应该如何更改代码以便它能够处理Nobj=n Nobj=3; Card=10; delta1=1/(Card-1); alpha1=0:delta1:1; k=0; Pesos=zeros(Card^Nobj,Nobj); for i=1:size(alpha1,2) for ii=1:size(alpha1,2) for iii=1:si
Nobj=3
时使用变量Pesos
的程序。这里我使用3个嵌套的for
循环来计算比索
,但是我应该如何更改代码以便它能够处理Nobj=n
Nobj=3;
Card=10;
delta1=1/(Card-1);
alpha1=0:delta1:1;
k=0;
Pesos=zeros(Card^Nobj,Nobj);
for i=1:size(alpha1,2)
for ii=1:size(alpha1,2)
for iii=1:size(alpha1,2)
k=k+1;
Pesos(k,:)=[alpha1(i) alpha1(ii) alpha1(iii)];
if sum(Pesos(k,:))>0
Pesos(k,:)=Pesos(k,:)/sum(Pesos(k,:));
else
Pesos(k,:)=[0 0 1];
end
end
end
end
使用以下命令将其矢量化:
sum(比索(k,:)
总是大于零,因为all(alpha1>0)
第一行不会大于0。因为所有元素都是0
% Parameters
N = 3;
Card = 10;
% Generate regularly-spaced gridded data of identical
% ranges along N dimensions
alpha1 = linspace(0, 1, Card);
[Pesos{1:N}] = ndgrid(alpha1);
% Expand and concatenate horizontally
Pesos = cellfun(@(x)x(:), Pesos(N:-1:1), 'UniformOutput', false);
Pesos = [Pesos{:}];
% Divide by the row sums
Pesos = bsxfun(@rdivide, Pesos, sum(Pesos,2));
% or
%
% Pesos = Pesos ./ sum(Pesos,2);
%
% if you're on R2016b or later.