2015-09-12 102 views
1

因为上帝只知道什么原因,我们被要求在AI课程中使用MATLAB。我想要做的就是初始化一个数组,并将数组推到它上面。在Ruby中,这将是:在MATLAB中将数组推向二维数组(矩阵)

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 
+0

我完全理解的挫折。 –

+0

好的,所以问题是你不知道在每次迭代中'child_state'的长度? – beaker

+0

在这种情况下,我确实知道child_state的长度。我只是不知道会有多少个child_state数组(行)。我很沮丧,因为这在我用过的任何其他编程语言中都是微不足道的 – somecbusnerd

回答

2

可以追加数组在MATLAB阵列时不知道尺寸,但它不会是因为MATLAB非常有效将在每次执行时为整个阵列分配空间。以下是如何做到这一点:

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

阵列=

阵列=

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 ] 

ar光线=

1  2  4 

阵列=

1  2  4 
5  6  7 

为更像阵列的红宝石的附加应该使用cell arrays

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

细胞=

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

GIYF。看来你正在寻找horzcatvertcat。查看MATLAB的文档Creating and concatenating matrices.;从vertcat页面:

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

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

+0

我已经阅读过。在每个例子中,你都必须知道矩阵的维数,而我不知道。它发生的具体问题,我知道被推的数组的长度,但我不知道这些数组将被推动多少。 – somecbusnerd

+1

你有没有尝试迭代几个'multi_arr = vertcat(multi_arr,an_arr1)'?目前我没有MATLAB,但它应该可以工作。至少,我最后一次在Octave中做到了这一点。 –

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 
+0

感谢您的回应,但这只是第一个数组的长度和附加值在第二个数组中。我试图通过将数组添加到数组来创建矩阵(创建二维数组) – somecbusnerd

+0

您的意思是您希望从一个空数组开始,并将多个不同大小的二维数组添加到同一个数组中? – user3667217

+0

我想从一个空数组开始,并将行追加到数组中,这些行本身就是数组。 – somecbusnerd