gpt4 book ai didi

matlab - 在 MATLAB 中重复矩阵行

转载 作者:行者123 更新时间:2023-12-02 06:38:38 25 4
gpt4 key购买 nike

我有一个与这篇文章相关的问题:"Cloning" row or column vectors 。我尝试解决那里发布的答案,但未能将它们应用于我的问题。

<小时/>

就我而言,我想通过转换矩阵来“克隆”矩阵的每一行

A = [1,2; 3, 4; 5, 6]

进入矩阵

B = [1, 2
1, 2
3, 4
3, 4
5, 6
5, 6]

通过重复 A 的每一行多次。

<小时/>

到目前为止,我能够使用 repmat 处理单行,例如

A = [1, 2];
B = repmat(A, 2, 1)

>> B = [1, 2
1, 2]

我试图使用该公式构建一个循环,以获得所需的矩阵。循环看起来像

T = 3; N = 2;
for t = 1:T
for I = 1:N
B = repmat(C, 21, 1)
end
end

有人知道如何正确编写循环,或者更好的方法吗?

最佳答案

克朗

有几种方法可以做到这一点。最短的方法是使用 kron按照 Adiel 在评论中建议的功能。

A = [1,2; 3, 4; 5, 6];
B = kron(A, [1;1]);

请注意,ones 向量中的元素数量控制每行的重复次数。对于 n 次,请使用 kron(A, Ones(n,1))

kron 计算克罗内克张量积,这不一定是一个快速过程,理解起来也不直观,但它确实给出了正确的结果!

<小时/>

reshaperepmat

更容易理解的过程可能涉及 reshaperepmat 的组合。目的是将矩阵 reshape 为行向量,重复所需的次数,然后再次 reshape 它以重新获得两列矩阵。

B = reshape(repmat(reshape(A, 1, []), 2, 1), [], 2);

请注意,repmat 函数中的 2 控制每行的重复次数。对于 n 次,请使用 reshape(repmat(reshape(A, 1, []), n, 1), [], 2)

<小时/>

速度

可以编写快速基准测试:

% Setup, using a large A
A = rand(1e5, 2);
f = @() kron(A, [1;1]);
g = @() reshape(repmat(reshape(A, 1, []), 2, 1), [], 2);
% timing
timeit(f);
timeit(g);

输出:

  • kron 选项:
    0.0016622 秒
  • repmat/reshape 选项:
    0.0012831 秒

不同尺寸的扩展基准:

benchmark

摘要:

  • reshape 选项只需复制一次行,速度更快 (~25%),因此,如果您想最终得到每行 2 个的结果,则应该选择此选项一个大矩阵。

  • 对于行重复次数,reshape 选项的复杂度似乎为 O(n)。 kron 有一些初始开销,但是当您需要多次重复时,它会快得多,并且几乎不会因此而减慢!如果您要进行多次重复,请使用 kron 方法。

关于matlab - 在 MATLAB 中重复矩阵行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45030081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com