【问题标题】:Element-wise binary value concatenation of two matrices两个矩阵的逐元素二进制值连接
【发布时间】:2015-05-14 00:13:27
【问题描述】:

逐个元素,我想将不同矩阵的二进制值连接到一个矩阵。

例如,

|1 0 0|  |0 1 0|   |10 01 00|         
|0 1 1|  |1 1 0| = |01 11 10|       
|1 0 1|  |0 0 1|   |10 00 11|

如何做到这一点?

【问题讨论】:

  • 据我所知,Matlab 无法使用二进制值在数字矩阵中输入数字。 Matlab 的逻辑矩阵类型只存储一位二进制,即真假。您的输出矩阵需要是数字的,在这种情况下它会以十进制显示,或者是字符串,在这种情况下您将无法使用更多的数学运算。

标签: matlab matrix binary binary-matrix binary-image


【解决方案1】:

我会将输出矩阵存储为十进制矩阵,并在访问元素时转换为二进制字符串。

要连接元素,请将每个输入矩阵视为二进制数字

A1 = [1 0 0; 0 1 1; 1 0 1];
A2 = [0 1 0; 1 1 0; 0 0 1];
output = A1 * 2^1 + A2 * 2^0;
output_str = arrayfun(@dec2bin, output, 'UniformOutput', false);  

output 将是一个双矩阵

[2,  1,  0;
 1,  3,  2;
 2,  0,  3]

output_str 将是一个字符串元胞数组

['10', '1',  '0';
 '1',  '11', '10';
 '10', '0',  '11']

【讨论】:

  • @Michael 很高兴能帮上忙!
  • 另外,如果您不介意,您可能需要将'uni',0 添加到arrayfun 的末尾以避免错误。
  • @SanthanSalai 完成。 :)
【解决方案2】:

这是一种没有bin2decdec2bin 转换的替代方案

out = arrayfun(@(x,y) strcat(num2str(x),num2str(y)),A1,A2,'Uni',0);

输入:

A1 = [1 0 0; 0 1 1; 1 0 1];
A2 = [0 1 0; 1 1 0; 0 0 1];

输出:

>> out

out = 

'10'    '01'    '00'
'01'    '11'    '10'
'10'    '00'    '11'

如果你希望它是数字而不是字符串,你可以这样做:

outp = cellfun(@(x) str2double(x), out);

输出:

>> outp

outp =

10     1     0
 1    11    10
10     0    11

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 2013-11-26
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 2021-04-29
    • 2013-05-28
    相关资源
    最近更新 更多