在MATLAB中将数组推到2D数组(矩阵)上

时间:2015-09-12 22:02:18

标签: 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

3 个答案:

答案 0 :(得分:2)

您可以在不知道尺寸的情况下将数组附加到matlab中的数组,但效率不高,因为每次执行时,matlab都会为整个数组分配空间。这是如何做到的:

arrays = [];
arr1 = [1,2];
arr2 = [3,4,5];
% append first array
arrays  = [arrays ,arr1 ]
% append second array
arrays  = [arrays ,arr2 ]

arrays =

 1     2

arrays =

 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 ]

arrays =

 1     2     4

arrays =

 1     2     4
 5     6     7

对于更多类似ruby的数组,你应该使用cell arrays

cells = {};
cells = [cells ,[4,5] ]
cells = [cells ,[1,1,1] ]
cells = [cells ,['hello']]

cells =

[1x2 double]    [1x3 double]    'hello'

答案 1 :(得分:1)

GIYF。您似乎在寻找horzcatvertcat。查看MATLAB的文档Creating and concatenating matrices.;来自vertcat页面:

  

C = vertcat(A1,...,AN)垂直连接数组A1,...,AN。参数列表中的所有数组必须具有相同的列数。

     

如果输入是多维数组,则vertcat会沿着第一维连接N维数组。其余尺寸必须匹配。

答案 2 :(得分:0)

这是一个应该做你想要的功能:将行向量连接到数组而不管大小。此函数将检查沿输入和输出数组的第二轴的尺寸,并将零填充到任何较小的尺寸,以便它们可以沿第一轴连接。

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