gpt4 book ai didi

matlab - 将重复行移动到矩阵中的新列

转载 作者:太空宇宙 更新时间:2023-11-03 20:24:11 25 4
gpt4 key购买 nike

我正在使用一个 n x 1 矩阵 A,其中包含重复值:

A = [0;1;2;3;4;   0;1;2;3;4;   0;1;2;3;4;    0;1;2;3;4]

对应于 B 值的 n x 1 矩阵:

B = [2;4;6;8;10;  3;5;7;9;11;  4;6;8;10;12;  5;7;9;11;13]

我正在尝试生成一个通用代码以将每个重复放入单独的列中并将其存储到 Aa 和 Bb 中,例如:

Aa = [0  0  0  0     Bb = [2  3  4  5
1 1 1 1 4 5 6 7
2 2 2 2 6 7 8 9
3 3 3 3 8 9 10 11
4 4 4 4] 10 11 12 13]

本质上,A和B的每次重复都需要复制到下一列,然后从第一列删除

Visual description of matrix row shifting to columns (paint)

到目前为止,我已经设法确定有多少重复,并将整个列复制到下一列,然后复制下一个重复次数,但我的方法不会像这样将矩阵行移动到列.

clc;clf;close all
A = [0;1;2;3;4;0;1;2;3;4;0;1;2;3;4;0;1;2;3;4];
B = [2;4;6;8;10;3;5;7;9;11;4;6;8;10;12;5;7;9;11;13];

desiredCol = 1; %next column to go to
destinationCol = 0; %column to start on
n = length(A);
for i = 2:1:n-1
if A == 0;
A = [ A(:, 1:destinationCol)...
A(:, desiredCol+1:destinationCol)...
A(:, desiredCol)...
A(:, destinationCol+1:end) ];
end
end

A = [...] 检索自 Move a set of N-rows to another column in MATLAB

如有任何提示,我们将不胜感激。如果您需要进一步的解释,请告诉我!

谢谢!

最佳答案

鉴于我们在评论中的讨论,您只需要使用 reshape如果元素数量匹配,它将已知维度的矩阵转换为具有指定维度的输出矩阵。您希望将具有一定数量重复模式的向量转换为矩阵,其中每一列都有这些重复实例之一。 reshape 按列优先顺序创建一个矩阵,其中按列对值进行采样,并以此方式填充矩阵。这非常适合您的情况。

假设您已经知道您期望有多少“重复”,我们称之为 An,您只需 reshape 您的向量,使其具有 T = n/An 行,其中 n 是向量的长度。这样的事情会起作用。

n = numel(A); T = n / An;
Aa = reshape(A, T, []);
Bb = reshape(B, T, []);

第三个参数有空括号,这告诉 MATLAB 推断有多少列,如果有 T 行。从技术上讲,这只是 An 列,但很高兴向您展示 MATLAB 的灵 active 。

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

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