matlab - 有没有办法在矩阵 repmat 数组上执行 mpower?

标签 matlab vectorization

我想知道是否有办法提高矩阵的功率一个 作为一个数组?

假设我们有这个矩阵

A =

   5   4
   3   6

然后我们重复它的形状。
>> repmat(A, 5, 1)
ans =

   5   4
   3   6
   5   4
   3   6
   5   4
   3   6
   5   4
   3   6
   5   4
   3   6

现在我想提高功率,所以长时间重复的矩阵如下所示:
>> [A^1; A^2; A^3; A^4; A^5]
ans =

       5       4
       3       6
      37      44
      33      48
     317     412
     309     420
    2821    3740
    2805    3756
   25325   33724
   25293   33756

在 MATLAB/Octave 中没有 for 循环是否可以做到这一点?

最佳答案

使用 arrayfun 的另一个选项

B = cell2mat(arrayfun(@(x)A^x,1:5,'UniformOutput',0).')

结果:
B =
   5       4
   3       6
  37      44
  33      48
 317     412
 309     420
2821    3740
2805    3756
25325   33724
25293   33756

但在这种情况下,基本的 for 循环可能是最快的选择。

Octave 基准测试:
tic
iif = @(varargin) varargin{2*find([varargin{1:2:end}], 1, 'first')}();
recPower = @(A, B, n, f) iif(n > 1, @() [B; f(A, A * B, n - 1, f)], true, @() B);
nPower = @(A, n) recPower(A, A, n, recPower);
for ii = 1:1000
% Calculate for arbitrary n.
    nPower(A, 5);
end
toc

耗时是 1.023 秒。
tic
for ii = 1:1000
    B = cell2mat(arrayfun(@(x)A^x,1:5,'UniformOutput',0).');
end
toc

耗时是 4.8684 秒。
tic
for ii = 1:1000
    B=[];
    for jj = 1:5
    B = [B;A^jj];
    end
end
toc

耗时是 0.039371 秒

关于matlab - 有没有办法在矩阵 repmat 数组上执行 mpower?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55347294/

相关文章:

python - 为什么 RGB 图像上的 python cv2.resize 函数给出的结果与 MATLAB imresize 函数不同?

matlab - 如何将 RGB 直方图转换为色谱?

python - 如何有效地找出序数中的数字是什么?

python - 引导 numpy 二维数组

performance - 替换二维矩阵的元素

matlab - 显示集群 kmeans 数据上的行

matlab - 最近元素 MATLAB

python Pandas : trying to vectorize a function using date_range

python - numpy 中二维数组上的矢量化移动窗口

matlab - 在矩阵中保存不同大小的向量