【发布时间】:2020-04-02 19:27:53
【问题描述】:
假设我有一个简单的二维数组 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 子矩阵都是我正在寻找的唯一矩阵之一,然后根据需要提取每个矩阵。
谢谢!
【问题讨论】:
-
arrayfun 和 celfun 是循环。你只是看不到他们。自几年前以来,MATLAB 中的循环速度很快。
-
@AnderBiguri 我向我的同事解释了这一点,但可惜我在这里 :)
标签: arrays matlab multidimensional-array