[已解决] 矩阵索引

[复制链接]
bbbbbbbb 发表于 2017-7-15 22:08:16
比如我有一个矩阵 i=(1:100); k=1*(i>=1 & i<10)+2*(i>=10 & i<20)+3*(i>=20 & i<30)+4*(i>=30 & i<40)...
     +5*(i>=40 & i<50)+6*(i>=50 & i<=100);
A=[i;k(i)]

现在我要 find 矩阵 A 的第二行也就是 k(i)=1 时对应的 i 值,然后让这些 i 值相加得到一个数,要怎么写?k(i)=2 时,i 相加。。。这样的


最佳答案


jingzhaos 发表于 2017-7-17 09:03:47
bbbbbbbb 发表于 2017-7-17 08:48
什么意思?之前我用的find第三行k的取值,然后 sum 矩阵的累加,但它累加的是第一行 i ,我要的是第二行 ...

实在看不懂你要什么了
1. 一楼的k不是随机的,是按顺序来的,之后你说是随机的
2.一楼说要i加到一起,现在你说要的是累加i^2,你到底要累加啥?
  1. clear
  2. i=1:100; %第一行
  3. E=i.^2;  %第二行
  4. k=randi(10,1,100); %k是随机的?这里按1~10随机 第三行
  5. iEk=[i;E;k];       %这里并到一起,变成3行
  6. kuni=unique(iEk(3,:));
  7. for m=1:length(kuni)
  8.     ind=find(iEk(3,:)==kuni(m));
  9.     sum_E(m)=sum(iEk(2,ind));
  10. end
  11. sum_E
复制代码

11 条回复


jingzhaos 发表于 2017-7-16 07:53:36
  1. k=[floor([1:99]/10)+1 10]
  2. i=1:100
  3. arrayfun(@(m) sum(i(k==m)),1:10)
复制代码

bbbbbbbb 发表于 2017-7-16 14:10:10

现在有三行 i 列的矩阵,第一行是 i 的序号,1:100,第二行是对应的 E=i^2 ,第三行是 k ,每个 i 对应不同的 k 值,k=1:10 ,从这个矩阵中找出 k=1 时对应的 i ,然后让对应的 E 相加;再 k=2, 。。。这个呢?

jingzhaos 发表于 2017-7-16 14:23:18
本帖最后由 jingzhaos 于 2017-7-16 14:25 编辑
bbbbbbbb 发表于 2017-7-16 14:10
现在有三行 i 列的矩阵,第一行是 i 的序号,1:100,第二行是对应的 E=i^2 ,第三行是 k ,每个 i 对应不同 ...
  1. i=1:100;
  2. E=i.^2;
  3. k=[floor([1:99]/10)+1 10];
  4. kuni=unique(k);
  5. for m=1:length(kuni)
  6. ind=find(k==kuni(m));
  7. sum_E(m)=sum(E(ind));
  8. end
  9. sum_E
复制代码

bbbbbbbb 发表于 2017-7-16 20:40:59

floor 后面的是什么意思能解释下吗?

bbbbbbbb 发表于 2017-7-16 20:47:32

并且 k 不是按从1到10的顺序来的,是随机的

jingzhaos 发表于 2017-7-16 21:55:36
bbbbbbbb 发表于 2017-7-16 20:47
并且 k 不是按从1到10的顺序来的,是随机的

那就是计算10个k,你完全可以用你的方法算

bbbbbbbb 发表于 2017-7-17 08:48:21
jingzhaos 发表于 2017-7-16 21:55
那就是计算10个k,你完全可以用你的方法算

什么意思?之前我用的find第三行k的取值,然后 sum 矩阵的累加,但它累加的是第一行 i ,我要的是第二行的 i^2,k 在第三行

jingzhaos 发表于 2017-7-17 09:03:47
bbbbbbbb 发表于 2017-7-17 08:48
什么意思?之前我用的find第三行k的取值,然后 sum 矩阵的累加,但它累加的是第一行 i ,我要的是第二行 ...

实在看不懂你要什么了
1. 一楼的k不是随机的,是按顺序来的,之后你说是随机的
2.一楼说要i加到一起,现在你说要的是累加i^2,你到底要累加啥?
  1. clear
  2. i=1:100; %第一行
  3. E=i.^2;  %第二行
  4. k=randi(10,1,100); %k是随机的?这里按1~10随机 第三行
  5. iEk=[i;E;k];       %这里并到一起,变成3行
  6. kuni=unique(iEk(3,:));
  7. for m=1:length(kuni)
  8.     ind=find(iEk(3,:)==kuni(m));
  9.     sum_E(m)=sum(iEk(2,ind));
  10. end
  11. sum_E
复制代码
回复此楼

bbbbbbbb 发表于 2017-7-17 11:18:15
jingzhaos 发表于 2017-7-17 09:03
实在看不懂你要什么了
1. 一楼的k不是随机的,是按顺序来的,之后你说是随机的
2.一楼说要i加到一起,现 ...

一楼我只是想学一下再举一反三,然而并没有举起来。。。
后面还是拿了更接近的例子,后面的代码就是我需要的。我matlab的基础比较差,十分感谢大神的悉心指导!

jingzhaos 发表于 2017-7-17 12:19:57
bbbbbbbb 发表于 2017-7-17 11:18
一楼我只是想学一下再举一反三,然而并没有举起来。。。
后面还是拿了更接近的例子,后面的代码就是我需 ...

实际上还有个更简单的方式。第四行以下全不要,换成一句即可
  1. sum_E=accumarray(iEk(3,:)',iEk(2,:)')'
复制代码

bbbbbbbb 发表于 2017-7-17 18:43:46
jingzhaos 发表于 2017-7-17 12:19
实际上还有个更简单的方式。第四行以下全不要,换成一句即可

:handshake:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表