作者Africakid (非~洲小子)
看板MATLAB
标题[问题]load ".mat" 的变数操作问题
时间Mon Sep 2 09:15:59 2013
已爬文,不过没有找到类似的问题
(或是我眼瞎了请告诉我)
版本: R2010b
问题: 我自己写好的.mat里头有一个结构变数 A
大概长这样=>
A(1).name = 'apple';
A(2).name = 'banana';
...
我想在读进.mat之後,用for 回圈把A补加上其他的东西,比方
All_fruit_price = [100 45 30 67 ...];
for i = (1:n)
A(i).price = All_fruit_price(1,i);
end
但是在程式码上这样写,code会在A底下出现这样的警示讯息:
the variable 'A' appears to change size on every loop iteration
虽然就这样放着不管他也还是能跑
但是code看起来就有一堆黄色蚯蚓实在让人觉得不是很好
想请问版上各位大大有没有遇过类似问题及解决的方法,谢谢!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.82.182
1F:推 kurt28:维度会随着回圈增加 可以先把A开好 09/02 09:29
2F:推 kurt28:更正一下 应该是A.price的大小会随着回圈增加比较精确@@ 09/02 09:58
请问您的意思是像这样吗?
for k = (1:size(A,1))
A(k).price = [];
end
我自己这样写的时候一样会在A的地方出现同样的讯息
还是我搞错意思了?
※ 编辑: Africakid 来自: 140.116.82.182 (09/02 10:45)
3F:推 DKer:warning的意思是随着你回圈进行,A这个变数的大小会越来越大 09/02 13:06
4F:→ DKer:解决这个warning的方法就是在回圈开始之前把变数大小宣告好 09/02 13:06
5F:→ DKer:回圈里只要填格子,不用再把变数加大 09/02 13:06
6F:→ DKer:structrue我不常用,无法告诉你怎麽宣告 sorry 09/02 13:07
7F:推 kurt28:可以开始时就开.price A=struct(... , ... ,'price',[]) 09/02 13:53
8F:推 kurt28:不过我用2013 只要开始的时候有宣告A 後面用原PO的回圈 09/02 14:15
9F:→ kurt28:好像就不会出现那个warning 09/02 14:15
大概了解两位大大的意思:
---
1. A = struct('name',[],'input',struct('a',[],'b',[]));
2.
3. for i = (1:10)
4. A(i).name = 'GOOD';
5. A(i).input.a = i;
6. A(i).input.b = strcat(num2str(i),'+',num2str(5*i));
7. end
8.
9. save('All.mat','A');
---
如果我把第一行挡住的话,就会出现我原本说的黄色蚯蚓的问题
如果不挡住就OK。
假设上面是一个test.m档好了
如果我现在创一个test2.m档如下:
---
1. load('All.mat');
2.
3. for i = (1:size(A,2))
4. A(i).c = A(i).input.a+ 5*A(i).input.a;
5. end
---
那麽在第四行就会有黄色蚯蚓了。
虽然我尝试在test.m档里把A的结构多加一个c
但是好像没有办法影响到test2.m的警告出现,想请问一下这事儿有解吗?
再麻烦各位大大解惑了,谢谢! > <
※ 编辑: Africakid 来自: 140.116.82.182 (09/02 17:09)
10F:推 kurt28:一样 如同D大所说 你的变数会随着回圈增加 要解决的话就是 09/02 18:42
11F:→ kurt28:在回圈执行前先宣告这个变数的size 09/02 18:43
12F:→ kurt28:糟糕 又漏字 变数的size会随着回圈增加才对XD 09/02 18:44
13F:→ kurt28:宣告的可以用ones zeros ..等等去开启变数 09/02 18:45
14F:→ Africakid:不过我貌似没有找到对structure的宣告呢XD 好像都是 09/03 21:40
15F:→ Africakid:需要的时候直接写进去这样。比如A(3).c = ...之类 09/03 21:40
16F:推 kurt28:看原PO你的需求 大多状况的确是你说的那样XD 09/03 21:55
17F:→ kurt28:不过也是可以事先宣告就是了 (为了消除那黄色警告XD) 09/03 21:55