MATLAB: Как объединить две числовые матрицы таким образом, чтобы соответствующие числа в каждой матрице теперь были объединены

#matlab #matrix #concatenation

#matlab #матрица #конкатенация

Вопрос:

Например, давайте возьмем матрицы:

 A= 1 0 0
   0 1 0
   1 1 0

B= 1 1 0
   0 0 1
   1 0 0
 

Требуемый результат

 AB=11 01 00
   00 10 01
   11 10 00
 

Комментарии:

1. Можете ли вы добавить код? Что у вас есть / пробовали и не работает?

2. Что это за формат на самом AB деле ? Массив ячеек из строк?

3. Ограничивается ли этот вопрос логикой?

Ответ №1:

Попробуйте это:

 reshape(mat2cell(dec2bin(A B), ones(numel(A),1)), size(A))
 

Или более компактное предложение от Rody:

 reshape(num2cell(dec2bin(A B), 2), size(A))
 

Комментарии:

1. 1, но я бы изменил внутреннюю часть на num2cell(dec2bin(A B), 2)

2. также: ваше решение потребляет 576 байт, тогда как полностью логическое решение потребляет 18 байт… Фактически, решение на основе ячеек всегда потребляет в 32 раза больше памяти, чем чисто логическое решение. Возможно, это и неплохо (вопрос не очень конкретный), но для кого-то это может иметь значение 🙂

3. Как вы можете распространить это на три или более матриц? Как только элементы находятся в массиве ячеек, я не могу работать с ними, как это было сделано ранее

4. @пользователь3769974 dec2bin(A B C D...)

Ответ №2:

На ум приходят 3 способа; это немного зависит от того, чего именно вы хотите.

 % Example data (make them logical to save space)
A= [1 0 0
    0 1 0
    1 1 0] == 1;

B= [1 1 0
    0 0 1
    1 0 0] == 1;

%# Method 1
cols = size(A,2)   size(B,2);
C1(:, 1:2:cols) = A;
C1(:, 2:2:cols) = B


%# Method 2
C2 = cellfun(@horzcat, num2cell(A),num2cell(B), 'UniformOutput',false)
C2{:,1}

%# Method 3 (same as 2, really, but simpler)
C3 = strcat(num2cell(A), num2cell(B))
C3{:,1}
 

Комментарии:

1. Спасибо. Помог второй способ. Хотя мне нужны были элементы, хранящиеся в массиве ячеек в виде строки. Следовало бы упомянуть об этом. В любом случае ответ Дэна охватывает это.