簡體   English   中英

在MATLAB中將數組推到2D數組(矩陣)上

[英]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'

GIYF。 看來你正在尋找horzcatvertcat 查看MATLAB的創建和連接矩陣的文檔 ; 來自vertcat頁面:

C = vertcat(A1,...,AN)垂直連接數組A1,...,AN 參數列表中的所有數組必須具有相同的列數。

如果輸入是多維數組,則vertcat沿第一維連接N維數組。 其余尺寸必須匹配。

這是一個應該做你想做的功能:將行向量連接到數組而不管大小。 此函數將檢查沿輸入和輸出數組的第二軸的尺寸,並將零填充到任何較小的尺寸,以便它們可以沿第一軸連接。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM