[英]Push array onto 2D array (matrix) in MATLAB
因为上帝只知道是什么原因,我们被要求在AI课程中使用MATLAB。 我想做的就是初始化一个数组,然后将数组推到它上面。 在Ruby中,这将是:
multi_arr = []
an_arr = [1, 2, 3, 4]
multi_arr << an_arr
完成! 不幸的是我在MATLAB中找不到类似的简单解决方案。
任何建议都将非常感激。
编辑:对于感兴趣的,这是我到达的相当不合理的解决方案:
child_states = []
child_state = [0,1,2,3,4,5,6,7,8]
% returns [rows, columns]
dimensions = size(child_states)
child_states(dimensions(1)+1, 1:9) = child_state
您可以在不知道尺寸的情况下将数组附加到matlab中的数组,但效率不高,因为每次执行时,matlab都会为整个数组分配空间。 这是怎么做的:
arrays = [];
arr1 = [1,2];
arr2 = [3,4,5];
% append first array
arrays = [arrays ,arr1 ]
% append second array
arrays = [arrays ,arr2 ]
数组=
1 2
数组=
1 2 3 4 5
如果要追加的每个数组具有相同的长度,则可以将它们作为行附加:
arrays = [];
arr1 = [1,2,4];
arr2 = [5,6,7];
% append first array
arrays = [arrays ; arr1 ]
% append second array
arrays = [arrays ; arr2 ]
数组=
1 2 4
数组=
1 2 4
5 6 7
对于更多类似ruby的数组,你应该使用单元格数组 :
cells = {};
cells = [cells ,[4,5] ]
cells = [cells ,[1,1,1] ]
cells = [cells ,['hello']]
cells =
[1x2 double] [1x3 double] 'hello'
这是一个应该做你想做的功能:将行向量连接到数组而不管大小。 此函数将检查沿输入和输出数组的第二轴的尺寸,并将零填充到任何较小的尺寸,以便它们可以沿第一轴连接。
function m = freevertcat(m, n)
if isempty(m)
m = cat(1, m, n);
else
size_m = size(m, 2);
size_n = size(n, 2);
if size_m > size_n
n(size_n+1 : size_n + size_m - size_n) = 0
elseif size_n > size_m
m(:, size_m+1 : size_m + size_n - size_m) = 0;
end
m = cat(1, m, n);
end
示例用法
m = []
n = [1,2,3,4,5]
m = freevertcat(m,n)
p = [3,3,3]
m = freevertcat(m,p)
你会得到
m = 1 2 3 4 5
3 3 3 0 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.