首页 > 解决方案 > 在matlab中将元素附加到单元格

问题描述

为了将“类似 python 的附加”元素添加到 Matlab 列表中,我使用以下迭代

list = [element1 element2 ... ; list]

如果列表元素是数字或字符,它工作正常。但是,如果我尝试将它们结合起来,它就不起作用。我希望将 2x1 向量(字符编号)附加到 Matlab 列表中。有什么建议吗?

标签: matlablistappend

解决方案


MATLAB 没有列表。如果您尝试将 Python 1 对 1 转换为 MATLAB,您会遇到各种各样的问题。如果您要在 MATLAB 中编程,花一点时间了解 MATLAB 如何处理数据是值得的。MATLAB 的制造商为初学者提供了一些非常好的在线教程(它是免费的!)。

在 MATLAB 中,一切都是数组。有数字、逻辑、字符和元胞数组,以及结构数组和对象数组。这些之间的区别当然是每个数组内部的内容。元胞数组是唯一异构的(即包含不同类型的元素),因为每个元胞都是任意类型的数组。(struct数组也是异构存储,但数组的每个元素都是一个struct,字段相同,所以还是一致的。)

例如,MATLAB 没有双浮点类型。它的double类型是一个双浮点值数组。v = 1创建这样一个具有单个值的数组。


所以你想做的是:

list = {};
list = [ {element1}, {element2}, ..., list ];

花括号创建一个元胞数组。{element1}是一个包含单个元素的元胞数组。如您所知,方括号连接相同类型的元素。在这里,我们连接了一堆单元格数组。

上述语法的替代方法是:

list = { element1, element2, ..., list{:} };

此处,list{:}是以逗号分隔的元胞数组中的元素列表list。所有新旧元素都连接在一个元胞数组中。花括号与方括号类似,但在元胞数组中连接不同类型的元素。


如果要将(始终在末尾)元素附加到元胞数组中,一次一个元素,最好的方法是这样做

list = {};
for ...
   list{end+1} = new_element;
end

这比替代方案更有效(至少在 MATLAB R2017a 上——他们可能会在某个时候针对这些替代方案优化 JIT):

list = {};
for ...
   list = [list, {new_element}]; % DON'T DO THIS!
end
for ...
   list = {list{:}, new_element}; % DON'T DO THIS!
end

扩展任何其他数组类型也是如此。


推荐阅读