如何将一些元素组合成行矩阵的一个元素

时间:2013-11-27 05:01:09

标签: matlab

我需要在MATLAB中将一些元素组合成行矩阵的一个元素。例如,我的矩阵是 [1 2 3 4 5 6 7 8]。我想像[1234 5678]那样转换矩阵。请帮我这样做。

4 个答案:

答案 0 :(得分:3)

考虑以下用于组合单个数字的通用数值解法的匿名函数:

combineDigits = @(x) x*(10.^(length(x)-1:-1:0)).';

x的每个元素必须位于[0,9]上(即单个数字)。对于您的示例输入:

>> x = [1 2 3 4 5 6 7 8]
x =
     1     2     3     4     5     6     7     8
>> x1 = x(1:4); x2 = x(5:end);
>> combineDigits(x1)
ans =
        1234
>> combineDigits(x2)
ans =
        5678
>> 

匿名函数combinedDigits可以应用于任何通用实用程序函数,例如cellfun,以处理数据块。例如,考虑数字的2x8矩阵M,划分为2x2数字数组的1x4单元数组:

>> M = randi(9,2,8)
M =
     4     8     6     8     7     7     6     7
     9     9     1     9     7     4     2     1
>> Mpartitioned = mat2cell(M,[1 1],[4 4]) % specify ANY valid partitioning here
Mpartitioned = 
    [1x4 double]    [1x4 double]
    [1x4 double]    [1x4 double]
>> Mcompacted = cellfun(combineDigits,Mpartitioned)
ans =
        4868        7767
        9919        7421

答案 1 :(得分:1)

您可以按照以下方式执行此操作:

a=[1 2 3 4 5 6 7 8];
vec1=a(1:4)  %put a suitable number here
vec1=num2str(vec1);
vec1(ismember(vec1,' ')) = [];
vec1=str2double(vec1);

类似地,在向量的后半部分执行上述操作序列,并简单地在最终向量中连接它们。

注意:此解决方案仅适用于您在问题中提到的行向量(您提到了行矩阵,但我认为这就是您的意思)。

答案 2 :(得分:1)

这取决于。如果您可以保证您的行总是4的倍数,您可以执行以下操作:

reshape(sum(bsxfun(@times,reshape(Q',4,[])',[1000,100,10,1]),2),[],size(Q,1))';

这样做reshape矩阵就像这样:

[1 2 3 4 5 6 7 8     ->    [1 2 3 4
 8 7 6 5 4 3 2 1]           5 6 7 8
                            8 7 6 5
                            4 3 2 1]

然后我们按[1000,100,10,1]对每行进行多次排序并对每行求和:

[1 2 3 4          [1000 200 30 4         [1234
 5 6 7 8    ->     5000 600 70 8   ->     5678
 8 7 6 5           8000 700 60 5          8765
 4 3 2 1]          4000 300 20 1]         4321]

最后,我们再次重塑矩阵以恢复原始形状。

[1234         [1234 5678
 5678   ->     8765 4321]
 8765          
 4321]         

答案 3 :(得分:1)

首先在数值数组中定义您的值:

a = [1 2 3 4 5 6 7 8];

接下来转换为字符串:

b = num2str(a);

现在删除所有空格:

b(find(b == ' ')) = '';

在中间插入一个空格,然后转换回数字数组(我想这就是你想要的(?)):

c = str2num([b(1:4),' ',b(5:end)]);

那样

>> c(1)

ans =

        1234

>> c(2)

ans =

        5678

编辑:添加'结束'以涵盖任意范围。