Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何将一些元素组合成行矩阵的一个元素_Matlab - Fatal编程技术网

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

Matlab 如何将一些元素组合成行矩阵的一个元素,matlab,Matlab,我需要在MATLAB中将一些元素组合成行矩阵的一个元素。例如,我的矩阵是 [1 2 3 4 5 6 7 8]。我想像[1234 5678]那样变换矩阵。请帮我做这件事。您可以按以下方式做: 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); reshape(sum(bsxfun

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

您可以按以下方式做:

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);
reshape(sum(bsxfun(@times,reshape(Q',4,[])',[1000,100,10,1]),2),[],size(Q,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);
reshape(sum(bsxfun(@times,reshape(Q',4,[])',[1000,100,10,1]),2),[],size(Q,1))';
类似地,对向量的后半部分执行上述操作序列,并将它们简单地连接到最终向量中


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

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

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);
reshape(sum(bsxfun(@times,reshape(Q',4,[])',[1000,100,10,1]),2),[],size(Q,1))';
这将
重塑矩阵,如下所示:

[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]
然后,我们将每行乘以
[1000100,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]         

视情况而定。如果可以保证行始终是4的倍数,则可以执行以下操作:

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);
reshape(sum(bsxfun(@times,reshape(Q',4,[])',[1000,100,10,1]),2),[],size(Q,1))';
这将
重塑矩阵,如下所示:

[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]
然后,我们将每行乘以
[1000100,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]         

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

a = [1 2 3 4 5 6 7 8];
下一步转换为字符串:

b = num2str(a);
现在删除所有空格:

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

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

所以

>> c(1)

ans =

        1234

>> c(2)

ans =

        5678

编辑:添加“结束”以覆盖任意范围。

首先在数字数组中定义值:

a = [1 2 3 4 5 6 7 8];
下一步转换为字符串:

b = num2str(a);
现在删除所有空格:

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

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

所以

>> c(1)

ans =

        1234

>> c(2)

ans =

        5678

编辑:添加“end”以覆盖任意范围。

考虑以下匿名函数,以获得组合单个数字的通用数字解决方案:

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

考虑以下匿名函数作为组合单个数字的通用数字解决方案:

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

来了一条客轮!:)不过这是很长的一段。修复了外部重塑调用中的一个小错误,并对内部调用进行了略微简化。干杯,我必须承认我没有意识到空括号的简化。今天我学到了一些新东西。来了一句台词!:)不过这是很长的一段。修复了外部重塑调用中的一个小错误,并对内部调用进行了略微简化。干杯,我必须承认我没有意识到空括号的简化。今天我学到了一些新东西。请注意,如果数字大于9,这将产生意想不到的结果。是的,您的权利,因此我添加了“end”以覆盖任意范围。我仍然不太清楚如何用我们掌握的信息来概括“分裂”点。谢谢。请注意,如果数字大于9,这将产生意外的结果。是的,您的权利,因此我添加了“end”以覆盖任意范围。我仍然不太清楚如何用我们掌握的信息来概括“分裂”点。谢谢。这种情况会发生吗?您希望输出是什么<代码>[1:12;13:24]
人们做出的其他假设如何?这种情况会发生吗?您希望输出结果是什么<代码>[1:12;13:24]
那么人们做出的其他假设呢?