Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/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
Arrays Matlab:从串联生成唯一矩阵?_Arrays_Matlab_Multidimensional Array - Fatal编程技术网

Arrays Matlab:从串联生成唯一矩阵?

Arrays Matlab:从串联生成唯一矩阵?,arrays,matlab,multidimensional-array,Arrays,Matlab,Multidimensional Array,假设我有一个简单的2D数组a: A = [0.25 0.3; 0.1 0.5]; 我想将第三行与以下向量的每个元素逐个组合连接起来: B = 0:0.1:1; C = 0:0.1:1; 生成121个唯一矩阵。例如: A_prime = [0.25 0.3; 0.1 0.5; 0 0]; 就是这样一个矩阵 如果可能的话,我希望避免使用显式for循环,并使用arrayfun或cellfun来实现这一点 我知道meshgrid将提供B和C的所有唯一组合,我可以定义一个函数来分别对a和B,C的一个

假设我有一个简单的2D数组a:

A = [0.25 0.3; 0.1 0.5];
我想将第三行与以下向量的每个元素逐个组合连接起来:

B = 0:0.1:1;
C = 0:0.1:1;
生成121个唯一矩阵。例如:

A_prime = [0.25 0.3; 0.1 0.5; 0 0];
就是这样一个矩阵

如果可能的话,我希望避免使用显式for循环,并使用arrayfun或cellfun来实现这一点

我知道meshgrid将提供B和C的所有唯一组合,我可以定义一个函数来分别对a和B,C的一个元素执行串联。即:

[b_mesh, c_mesh] = meshgrid(B,C);
myfun = @(A,b,c) [A; b,c];
但arrayfun将导致以下错误:

arrayfun(myfun, A, b_mesh, c_mesh)

Error using arrayfun
All of the input arguments must be of the same size and shape.
Previous inputs had size 2 in dimension 1. Input #3 has size 11
这是有道理的。那么,是否有类似的实现来生成所有唯一的矩阵以保持维度一致

我的另一个想法是可能生成一个更大的矩阵,其中每个3x3子矩阵都是我正在寻找的唯一矩阵中的一个,然后根据需要提取每个矩阵

谢谢

也许你可以试试下面的meshgrid+cellfun

[b,c] = meshgrid(B,C);
Z = [b(:),c(:)];
A_primes = cellfun(@(x) [A;x], mat2cell(Z,ones(1,size(Z,1)),size(Z,2)),'UniformOutput', false);
以致

>> A_primes
A_primes =
{
  [1,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.00000

  [2,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.10000

  [3,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.20000

  [4,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.30000

  [5,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.40000

  [6,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.50000

....
也许你可以试试下面的meshgrid+cellfun

[b,c] = meshgrid(B,C);
Z = [b(:),c(:)];
A_primes = cellfun(@(x) [A;x], mat2cell(Z,ones(1,size(Z,1)),size(Z,2)),'UniformOutput', false);
以致

>> A_primes
A_primes =
{
  [1,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.00000

  [2,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.10000

  [3,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.20000

  [4,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.30000

  [5,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.40000

  [6,1] =

     0.25000   0.30000
     0.10000   0.50000
     0.00000   0.50000

....

以下是使用repmat和permute构建3d矩阵的替代方法,以使每个2d平面都是一个组合:

A = [0.25 0.3; 0.1 0.5];
[b_mesh, c_mesh] = meshgrid(B,C);
A_prime = [repmat(A, 1, 1, numel(b_mesh)); permute([b_mesh(:), c_mesh(:)], [3 2 1])];
结果:

A_prime =

ans(:,:,1) =

   0.25000   0.30000
   0.10000   0.50000
   0.00000   0.00000

ans(:,:,2) =

   0.25000   0.30000
   0.10000   0.50000
   0.00000   0.10000

ans(:,:,3) =

   0.25000   0.30000
   0.10000   0.50000
   0.00000   0.20000

ans(:,:,4) =

   0.25000   0.30000
   0.10000   0.50000
   0.00000   0.30000

...
可以使用第三个索引检索单个组合:

A_prime(:,:,112)
ans =

   0.25000   0.30000
   0.10000   0.50000
   1.00000   0.10000

以下是使用repmat和permute构建3d矩阵的替代方法,以使每个2d平面都是一个组合:

A = [0.25 0.3; 0.1 0.5];
[b_mesh, c_mesh] = meshgrid(B,C);
A_prime = [repmat(A, 1, 1, numel(b_mesh)); permute([b_mesh(:), c_mesh(:)], [3 2 1])];
结果:

A_prime =

ans(:,:,1) =

   0.25000   0.30000
   0.10000   0.50000
   0.00000   0.00000

ans(:,:,2) =

   0.25000   0.30000
   0.10000   0.50000
   0.00000   0.10000

ans(:,:,3) =

   0.25000   0.30000
   0.10000   0.50000
   0.00000   0.20000

ans(:,:,4) =

   0.25000   0.30000
   0.10000   0.50000
   0.00000   0.30000

...
可以使用第三个索引检索单个组合:

A_prime(:,:,112)
ans =

   0.25000   0.30000
   0.10000   0.50000
   1.00000   0.10000

arrayfun和celfun是循环。你就是看不见他们。“从几年前开始,MATLAB中的循环速度就很快了。”AnderBiguri我向我的同事解释了这一点,但遗憾的是,我在这里:arrayfun和celfun都是循环。你就是看不见他们。“从几年前开始,MATLAB中的循环速度很快。@AnderBiguri我向同事们解释了这一点,但遗憾的是,我在这里: