2015-09-12 3 views
1

Для Бога известно только, по какой причине мы просим использовать MATLAB в курсе ИИ. Все, что я хочу сделать, это инициализировать массив и нажимать на него массивы. В Ruby это будет:Нажмите массив на 2D-массив (матрицу) в MATLAB

multi_arr = [] 
an_arr = [1, 2, 3, 4] 
multi_arr << an_arr 

Done! К сожалению, я не могу найти подобное решение в MATLAB.

Любые советы будут очень оценены.

EDIT: для заинтересованных, вот довольно неловкий решение, которое я прибыл в:

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. Кажется, что вы ищете horzcat и vertcat. Ознакомьтесь с документом 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, но он должен работать. По крайней мере, в последний раз, когда я делал это в Октаве, это сработало. –

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

Спасибо за ответ, но это просто длина первого массива и добавляет значения во второй массив. Я пытаюсь создать матрицу, добавляя массивы в массив (создавая 2D-массив). – somecbusnerd

+0

Вы хотите, чтобы начать с пустого массива и добавить двумерный массив разного размера в один и тот же массив несколько раз? – user3667217

+0

Я хотел бы начать с пустого массива и добавить строки в массив, причем сами строки являются массивами. – somecbusnerd

Смежные вопросы