Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 如何使用repmat将一维向量重塑为三维矩阵?_Matlab_Multidimensional Array - Fatal编程技术网

Matlab 如何使用repmat将一维向量重塑为三维矩阵?

Matlab 如何使用repmat将一维向量重塑为三维矩阵?,matlab,multidimensional-array,Matlab,Multidimensional Array,我可以使用以下内容创建10x10x3矩阵: A(1:10,1:10,1) = 1/4; A(1:10,1:10,2) = 1/2; A(1:10,1:10,3) = 1/4; 如何使用repmat和给定的向量[1/4 1/2 1/4]实现这一点?用于复制数据,然后将其设置为正确的维度顺序。permute的需要源于repmat使用列主顺序,要求您首先创建三个正确的10x10切片,然后使用permute切换第一和第三维度 A = [1/4 1/2 1/4].'; % your data B = r

我可以使用以下内容创建
10x10x3
矩阵:

A(1:10,1:10,1) = 1/4;
A(1:10,1:10,2) = 1/2;
A(1:10,1:10,3) = 1/4;
如何使用
repmat
和给定的向量
[1/4 1/2 1/4]
实现这一点?

用于复制数据,然后将其设置为正确的维度顺序。
permute
的需要源于
repmat
使用列主顺序,要求您首先创建三个正确的
10x10
切片,然后使用
permute
切换第一和第三维度

A = [1/4 1/2 1/4].'; % your data
B = repmat(A,1,10,10); % use repmat to create a 3x10x10 copy
C=permute(B,[3 2 1]); % permute to the correct order

ans(:,:,1) =

    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500


ans(:,:,2) =

    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000


ans(:,:,3) =

    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500
    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500    0.2500

如果您不坚持使用
repmat
,则可以使用
ones
bsxfun

N = 10;
v = [1/4 1/2 1/4];
A = ones(N,N,3);
A = bsxfun(@times,A,permute(v,[3 1 2]))
这将创建一个
nxnx3
数组,其中每个元素都是
1
。然后我们将每个子矩阵(从上一个索引中的
1
3
)乘以
v
中的相应值,这是通过
bsxfun
实现的。为此,我们必须在
v
中引入领先的单态维度(将其转换为
[1 x 1 x 3]
),这就是调用
置换的目的

更新:如注释中所述,您可以在首次定义
a
时忽略最后一个维度:

N = 10;
v = [1/4 1/2 1/4];
A = ones(N,N); %one less dimension
A = bsxfun(@times,A,permute(v,[3 1 2]))

其原因是,在matlab中,假设每个变量都有无穷多个尾随单态维数(这就是为什么
整形(rand(2),[2 2 2 1 1])
返回一个
[2 x 2]
数组,而不是
[2 x 2 x 1 x 1]
one:后面的单例维度隐式存在,因此被省略)。在这种情况下,将
[N x N]
矩阵与
[1 x 1 x 3]
一相乘,但前者被隐式解释为
[N x N x 1]
bsxfun
处理其余部分。

首先
permute
(或
restrape
)然后
repmat
,可能会更快,因为这样做的话,排列/重新塑造的元素就更少了:
A=[1/4 1/2 1/4];B=repmat(重塑(A,1,1,[]),10,10)
A=cat(3,1/3,1/2,1/4);B=repmat(A,10,10)
进一步简化代码。您甚至可以从2D
a
开始,我认为,
bsxfun
将处理最后的dim扩展。