查看: 4285|回复: 10|关注: 0

[已解决] 请问我该如何读取元胞数组中每一个元胞的各个元素?

[复制链接]

新手

26 麦片

财富积分


050


13

主题

28

帖子

0

最佳答案
本帖最后由 红树林 于 2017-12-9 14:51 编辑

for b=1:cluster_n
index{b}=find(U(b,:))==max(U); %创建元胞数组。indexb=1*3cell均为数组形式,各位大神,请问我该如何读取每一个元胞中各个元素?并且数组元素个数不确定,我是用length(index{b})?假如第一个元胞是数组{1,2,4,6}。请问我该如何读取各个元素呢?
麻烦大神给我举个例子好吗

新手

7 麦片

财富积分


050


3

主题

17

帖子

0

最佳答案
发表于 2017-12-9 15:08:05 | 显示全部楼层
我也是新手,提一点浅见
你试试创建一个空矩阵
例如 a=[]
for k=1:length(index{b})
     a=[a;index{k}]
end

新手

26 麦片

财富积分


050


13

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-12-9 15:42:13 | 显示全部楼层
成为大佬 发表于 2017-12-9 15:08
我也是新手,提一点浅见
你试试创建一个空矩阵
例如 a=[]

我试了一下,总说我索引超过矩阵维度

新手

7 麦片

财富积分


050


3

主题

17

帖子

0

最佳答案
发表于 2017-12-9 16:05:34 | 显示全部楼层
能不能把你的代码发上来看看

新手

26 麦片

财富积分


050


13

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-12-9 16:27:46 | 显示全部楼层
红树林 发表于 2017-12-9 15:42
我试了一下,总说我索引超过矩阵维度

a=[]
for k=1:length(index{b})
     a=[a;index{k}]
end

      s(e,b)=0;s1(e,b)=0;s2(e,b)=0;
    for e=1:Ncell
         for b=1:cluster_n
        for k=1:length(index{b})
         s1(e,b)=s1(e,b)+Thcell(e,a(1,k));
         s2(e,b)=s2(e,b)+Thdd(e,a(1,k));
         s(e,b)=s(e,b)+w(e,a(1,k));
       end
         end麻烦你了

MATLAB 基础讨论
版块优秀回答者

入门

302 麦片

财富积分


50500


1

主题

434

帖子

54

最佳答案
  • 关注者: 5
发表于 2017-12-9 16:47:10 | 显示全部楼层 |此回复为最佳答案
  1. clear
  2. index{1}={1,2,5,8};
  3. index{2}={3,4,7};
  4. index{3}={6,9,10,11,12};
  5. b = cellfun(@length,index)
  6. for i=1:length(index)
  7.     for j=1:b(i)
  8.         a = cell2mat(index{i}(j))
  9.     end
  10. end
复制代码

在工作空间就会看到a的值就是依次读取的元包中的值。

新手

26 麦片

财富积分


050


13

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-12-9 17:36:19 | 显示全部楼层
lyhwinner 发表于 2017-12-9 16:47
在工作空间就会看到a的值就是依次读取的元包中的值。

太感谢您了,我明白了,太不好意思了,我还想问一下如何表示元素位置呢?a(i,j) = cell2mat(index{i}(j));这样可以吗?我想把它作为10*12矩阵s的列索引值,如s(1,a(1,3)),但是出现错误“元胞内容引用自非元胞数组对象。”请问我该如何进行转换呢?

新手

26 麦片

财富积分


050


13

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-12-9 21:40:23 | 显示全部楼层
lyhwinner 发表于 2017-12-9 16:47
在工作空间就会看到a的值就是依次读取的元包中的值。


复制代码
  1. clear
  2. U =[0.9590    0.9032    0.1312    0.0879    0.0306    0.0032    0.0211    0.2244    0.1355    0.0967;
  3.     0.0330    0.0784    0.2321    0.8890    0.9603    0.0037    0.0246    0.5116    0.1052    0.8879;
  4.     0.0080    0.0185    0.6366    0.0231    0.0091    0.9931    0.9543    0.2640    0.7593    0.0153];
  5. for b=1:3
  6.   index{b}=find(U(b,:))==max(U);
  7. d= cellfun(@length,index);
  8. for e=1:3
  9.     for j=1:d(b)
  10.         a(b,j) = cell2mat(index{b}(j));
  11.         A=[-26.3568  -15.0618  -14.9159  -14.9162  -14.9215  -15.0378  -17.5469  -15.1151  -25.7211  -14.9;
  12.             -26.3568  -15.0618  -14.9159  -14.9162  -14.9215  -15.0378  -17.5469  -15.1151  -25.7211  -14.9;
  13.             -26.3568  -15.0618  -14.9159  -14.9162  -14.9215  -15.0378  -17.5469  -15.1151  -25.7211  -14.9];
  14.          c(e,b)=A(e,a(b,j));
  15.     end
  16. end
  17. end
复制代码
大神,我照你下午写的方法举了个具体的例子,但是运行总出现错误“元胞内容引用自非元胞数组对象”。你能不能帮我看一下错在哪儿了?

MATLAB 基础讨论
版块优秀回答者

入门

302 麦片

财富积分


50500


1

主题

434

帖子

54

最佳答案
  • 关注者: 5
发表于 2017-12-10 14:19:54 | 显示全部楼层
红树林 发表于 2017-12-9 21:40
大神,我照你下午写的方法举了个具体的例子,但是运行总出现错误“元胞内容引用自非元胞数组对象”。你能 ...
  1. clear
  2. U =[0.9590    0.9032    0.1312    0.0879    0.0306    0.0032    0.0211    0.2244    0.1355    0.0967;
  3.     0.0330    0.0784    0.2321    0.8890    0.9603    0.0037    0.0246    0.5116    0.1052    0.8879;
  4.     0.0080    0.0185    0.6366    0.0231    0.0091    0.9931    0.9543    0.2640    0.7593    0.0153];
  5. for b=1:3
  6.   index{b}=find(U(b,:)==max(U));
  7. end
  8. d= cellfun(@length,index);
  9. for e=1:3
  10.     for j=1:d(e)
  11.         a(e,j) = index{e}(j)
  12.     end
  13. end
复制代码

新手

26 麦片

财富积分


050


13

主题

28

帖子

0

最佳答案
 楼主| 发表于 2017-12-10 15:59:39 | 显示全部楼层

真的是太感谢您了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

快速回复 返回顶部 返回列表