#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. Спасибо. Помог второй способ. Хотя мне нужны были элементы, хранящиеся в массиве ячеек в виде строки. Следовало бы упомянуть об этом. В любом случае ответ Дэна охватывает это.