从for循环返回向量作为矩阵中的列

11意见(过去30天)
艾玛Kuttler
艾玛Kuttler 2019年11月21日
评论: 1月 2019年11月22日
嗨,我有一个296x6矩阵 normalimpact, 我想给矩阵的每一列随机分配权重,做一些评分和排名操作,并对特定数量的试验(比如10次)重复这个操作,并输出每次试验的结果(列向量) RankOfNode) 作为矩阵中的列。每次迭代的结果 Rankofnode. )应该是最终矩阵中的自己的栏。
我只是对如何实现这个代码运行次数的索引感到困惑,因为已经有很多for循环和索引了。
normalimpact = horzcat(IrmantPowern1f,dranolictn1f,uscorpowern2f,dranolictn2f,rsormpowern3f,dranolictn3f);
循环的百分比每次用不同的权重做一堆运行这个代码????
%重量矩阵,给出每列的权重
重量=兰德(1,6);
重量=权重/和(重量);
Normalimpactw = bsxfun(@times, normalimpact, weights);
max_vals = max (normalimpactw);每个COLUM的最大值(1至6)
Dplus =零(尺寸(厘法,1),1);%初始化
为了II = 1:尺寸(厘米厘米,1)
dplus(ii,:) = sqrt(sum([numalimpactw(ii,:) - max_vals]。^ 2));
结尾
dplus;%列矩阵计算后
min_vals = min (normalimpactw);每列的%最小值(1到6)
Dminus =零(尺寸(厘法,1),1);%初始化
为了II = 1:尺寸(厘米厘米,1)
Dminus(ii,:) = sqrt(sum([numalimpactw(ii,:) - min_vals]。^ 2));
结尾
Dminus;%列矩阵计算后
%基于DPLUS和DMINU的值给出每行矩阵的分数
Sscore = 0(大小(Dminus, 1), 1);
为了n = 1:296
Sscore (n:) = Dminus (n:) / (Dminus (n:) + Dplus (n,:));
结尾
%生成每个节点的等级,即节点1具有秩50,节点2等级23
[〜,等级] = ismember(sscore,sort(score,“下降”));
RankOfNode =等级;
for循环????的% end

答案(1)

1月
1月 2019年11月21日
编辑:1月 2019年11月22日
从清理代码开始。
  • dplus;Dminus;什么都不做,这样只会浪费时间,让读者感到困惑。
  • 您是否正在运行Matlab版本> = R2016B?然后你可以省略bsxfun()调用并使用隐式扩展。
  • 还可以省略循环:
% 代替:
Dminus =零(尺寸(厘法,1),1);%初始化
为了II = 1:尺寸(厘米厘米,1)
Dminus(ii,:) = sqrt(sum([numalimpactw(ii,:) - min_vals]。^ 2));
结尾
Dminus;
% 经过
Dminus = vecnorm(normalimpactw - min_vals, 2,2);
%或者使用旧的Matlab版本:
tmp = bsxfun(@minus,normalimpactw,min_vals);
Dminus = SQRT(SUM(TMP。^ 2,2));
  • 你真的需要吗?ismember.,或者你想要排序顺序?
在一起:
normalimpact = horzcat(IrmantPowern1f,dranolictn1f,uscorpowern2f,dranolictn2f,rsormpowern3f,dranolictn3f);
循环的百分比每次用不同的权重做一堆运行这个代码????
%重量矩阵,给出每列的权重
重量=兰德(1,6);
重量=权重/和(重量);
Normalimpactw = normalimpact .* weights;
max_vals = max (normalimpactw);每个COLUM的最大值(1至6)
dplus = vecnorm(normalimpactw - max_vals,2,2);
min_vals = min (normalimpactw);每列的%最小值(1到6)
Dminus = vecnorm(normalimpactw - min_vals, 2,2);
sscore = dminus ./(Dminus + Dplus);
%是这意味着什么?^^元素设计?
[~, RankOfNode] = sort(Sscore,“下降”);
现在包括这个 为了 循环可能更容易。
为了k = 1:10
......
[〜,rankofnode(k,:)] = sort(score,“下降”);
%[编辑] ^孤儿“]”在这里删除
结尾
或者也许您希望在单元格数组中收集输出?
2评论
1月
1月 2019年11月22日
@Emma:我的代码中有一个错字,必须删除“]”。收集内部数据 Rankofnode. 仅适用于此变量与匹配大小预先分配。所以要么用来:
Rankofnode = Zeros(296,10);
为了k = 1:10
%代码的%来临
[〜,Rankofnode(:,k)] = sort(sscore,“下降”);
结尾
或者首先在单元格数组中收集值:
RankOfNodeC = cell(1,10);
为了k = 1:10
%代码的%来临
[〜,Rankofnodec {k}] = sort(score,“下降”);
结尾
Rankofnode = Cat(2,Rankofnodec {:});

登录评论。

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!