Re: [讨论] structure array 初始化大小

楼主: celestialgod (天)   2015-12-25 14:42:40
※ 引述《qazzzzz (:D)》之铭言:
: 第一次在这发言,请多多指教...><
: 我是想要建一个 structure array,
: 而且想要一开始就设定好他有多大,
: 可是看到网络上的范例都是依序把资料加上去,
: 虽然这样也是可以写得出来啦...
: 可是就觉得不太习惯,
: 觉得在一开始 create variable 的时候就定义好它大小会比较舒服...><
: 例如,我已经知道我有 100 个学生,
: 每个学生都有一个名字、和许多个 email (每个学生有不同数目的 email)
: 目前都是用 for loop 写:
: for i = 1 : 100
: student(i).name = '他的名字';
: student(i).email = [email1 email2 ...]
: end
: 想问问大家有没有可以在一开始定义 student 是 100 个的写法?
: 谢谢大家><
回一下旧文,最近发现struct其实可以当成array处理
也可以用arrayfun处理struct array
更重要的事情是,initialize的事情也迎刃而解了,用repmat即可
student = repmat(struct('name', [], 'email', []), 100, 1)
这种应用,像是plot时,回传的是struct也可以这样做~~
最近遇到,顺便分享一下
arrayfun + struct应用:
ex:
1. 取得每一个struct的内容 (字串可以变成cell,数字可为array)
arrayfun(@(x) x.name, dir(), 'uni', false)
% 得到当前目录下全部档案名称(以cell储存),ls是字串,而且在mac跟windows行为不同
arrayfun(@(x) x.bytes, dir())
2. 透过struct array去对每一个struct的资料做处理
datas = repmat(struct('x', [], 'y', []), 100, 1);
for i = 1:100
numData = randsample(10:100, 1);
datas(i).x = randn(numData, 1);
datas(i).y = 1 + datas(i).x * 2 + randn(numData, 1);
end
lmModels = arrayfun(@(d) fitlm(d.y, d.x), datas, 'uni', false);
作者: kusoer1017 (如果是你..可以喔)   2014-01-19 20:09:00
推荐这篇文章
作者: s4300026 (s4300026)   2015-12-27 14:24:00
推荐这篇文章

Links booklink

Contact Us: admin [ a t ] ucptt.com