2015-05-27 2 views
1

Есть ли способ мгновенно передать элементы массива n x n в массив ячеек n x n и наоборот, чтобы каждая ячейка в массиве ячеек имела строку, столбец и значение элемента? Например,Перенос элементов 2D-массива в массив ячеек

Input: 

A=[8 7  8  4  5; 
    7  0  7  4  4; 
    4  3  3  8  6; 
    7  0 10  8  7; 
    2  1  0  2  8;]; 

B=cell(5,5); 

Output: 

B{1}=[1 1 8]; 
B{2}=[2 1 7]; 
B{3}=[3 1 4]; 
B{4}=[4 1 7]; 
B{5}=[5 1 2]; 
B{6}=[1 2 7]; 
and so on... 
+0

Что вы подразумеваете под "instantly"? Как не делать никакой работы? Что вы сделали для его решения? –

+0

Кроме того, A всегда является квадратной матрицей? – brodoll

+0

Под этим я подразумеваю без использования цикла for, потому что он будет слишком медленным для больших матриц. A и B всегда являются квадратными матрицами. – user3080956

ответ

0

Может быть, с помощью arrayfun

[row, col] = ndgrid(1:size(A,1)); 
B=arrayfun(@(x,y,z) [x y z], row(:), col(:), A(:), 'uni', 0); 

Интересно отметить, что если вы используете

B=arrayfun(@(x,y,z) [x y z], row, col, A, 'uni', 0); 

вы получите массив B клеток с таким же размером, как A, где каждый элемент находится в соответствующем элементе в A.

1

Вот один подход:

dim=length(A); %//square matrix 
cols = repmat(1:dim,dim,1); 
rows = cols'; 
B=reshape(num2cell([rows(:) cols(:) A(:)],2),dim,dim); 

Вы можете обернуть этот кусок кода в функции, если вы собираетесь использовать его часто, чтобы «немедленно» перенести элементы матрицы в массив ячеек.

+1

Получил это. Большое спасибо! – user3080956

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