首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用循环和中频条件进行矩阵索引的问题

用循环和中频条件进行矩阵索引的问题
EN

Stack Overflow用户
提问于 2015-06-01 04:58:04
回答 1查看 88关注 0票数 1

我要做一些索引,如下所示:

代码语言:javascript
复制
for c=1:size(params,1)
    for d=1:size(data,2)
        if params(c,8)==1
            value1(c,d)=data(params(c,11),d);
        elseif params(c,8)==2
            value2(c,d)=data(params(c,11),d);
        elseif params(c,8)==3
            value3(c,d)=data(params(c,11),d);
        end
    end
end

这方面的问题是,如果我们有params(:,8)=1,3,1,3,2,3,1...,那么value1将包含2、4、5、6等行中的所有零。这是在params的第8列中没有1的行。类似地,value2将包含行1、2、3、4、6、7中的所有零。value3将包含第1、3、5、7、.行中的所有零。谁能告诉我如何索引,使我在行之间没有“空白”的零?谢谢!

编辑;下面是一个示例数据集:

data (1080x15双倍)

代码语言:javascript
复制
168 432 45  86
170 437 54  82
163 423 52  83
178 434 50  84
177 444 42  87
177 444 58  85
175 447 48  77
184 451 59  86
168 455 52  104
174 437 62  88
175 443 55  85
179 456 51  92
168 450 73  82
175 454 60  68

params (72x12 double -我们只对第8和11列感兴趣),所以为了空间起见,我只显示第8-11列:

代码语言:javascript
复制
1   10  15  1
3   12  16  16
2   10  15  32
3   12  16  47
1   8   14  63
2   10  15  77
2   8   14  92
3   10  15  106
1   12  16  121
3   8   14  137
2   10  15  151

value1、value2和value3的预期输出应为24x15。这是因为数据中有15列,而在params的第8列中,值1、2、3每列发生24次。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-01 13:53:39

您可以使用bsxfun来避免for-循环(请注意,它实际上不是自动生成的):

代码语言:javascript
复制
value1 = bsxfun(@times,data(params(:,11),:),(params(:,8)==1));
value2 = bsxfun(@times,data(params(:,11),:),(params(:,8)==2));
value3 = bsxfun(@times,data(params(:,11),:),(params(:,8)==3));

但是它仍然给出了零行的结果。因此,您可以通过以下方式删除零行:

代码语言:javascript
复制
value1(all(value1==0,2),:)=[];
value2(all(value2==0,2),:)=[];
value3(all(value3==0,2),:)=[];

您还可以使用上述命令删除结果中的零行,而无需使用bsxfun。不透明并不总是好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30565868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档