Matlab 向量中的数据排列

Matlab 向量中的数据排列,matlab,vector,Matlab,Vector,我有以下向量: 以下是生成此向量的代码: A = [11 115 167 44 51 5 6]; B = [100 1 1 87]; C = [2000 625]; D = [81 623 45 48 6 14 429 456 94]; E = [89]; F = [44 846 998 2035 498 4 68 4 1 89]; G = {A,B,C,D,E,F}; [max_val, idx] = max(cellfun(@numel, G)); % Find max sizes o

我有以下向量:

以下是生成此向量的代码:

A = [11 115 167 44 51 5 6];
B = [100 1 1 87];
C = [2000 625];
D = [81 623 45 48 6 14 429 456 94];
E = [89];
F = [44 846 998 2035 498 4 68 4 1 89];

G = {A,B,C,D,E,F};

[max_val, idx] = max(cellfun(@numel, G)); % Find max sizes of vectors

% Create vector with zeros filling open matrix space
LeftIndented = zeros(idx,max_val);
for k = 1:numel(G), LeftIndented(k,1:numel(G{k})) = G{k}; end
我想要一个向量,其中包括:

  • 右侧数据(左侧为零)
  • 居中数据(用零包围)
  • (请注意,如果数据不能精确居中,则在左侧关闭一个向量空间即可)


    如何实现这一点?

    您可以用零填充每个向量:

    A = [11 115 167 44 51 5 6];
    B = [100 1 1 87];
    C = [2000 625];
    D = [81 623 45 48 6 14 429 456 94];
    E = [89];
    F = [44 846 998 2035 498 4 68 4 1 89];
    
    G = {A,B,C,D,E,F};
    
    [max_val, idx] = max(cellfun(@numel, G)); % Find max sizes of vectors
    
    % Create vector with zeros filling open matrix space
    LeftIndented = zeros(idx,max_val);
    Centered = zeros(idx,max_val);
    RightAligned = zeros(idx,max_val);
    for k = 1:numel(G)
        LeftIndented(k,1:numel(G{k})) = G{k};
        l = length(G{k});
        padding = max_val - l;
        leftPadding = floor(padding / 2);
        Centered(k, :) = [zeros(1, leftPadding), G{k}, zeros(1, padding - leftPadding)];
        RightAligned(k, :) = [zeros(1, padding), G{k}];
    end
    
    这相当于

    A = [11 115 167 44 51 5 6];
    B = [100 1 1 87];
    C = [2000 625];
    D = [81 623 45 48 6 14 429 456 94];
    E = [89];
    F = [44 846 998 2035 498 4 68 4 1 89];
    
    G = {A,B,C,D,E,F};
    
    [max_val, idx] = max(cellfun(@numel, G)); % Find max sizes of vectors
    
    % Create vector with zeros filling open matrix space
    LeftIndented = zeros(idx,max_val);
    Centered = zeros(idx,max_val);
    RightAligned = zeros(idx,max_val);
    for k = 1:numel(G)
        LeftIndented(k,1:numel(G{k})) = G{k};
        l = length(G{k});
        padding = max_val - l;
        leftPadding = floor(padding / 2);
        Centered(k, 1 + leftPadding:leftPadding + l) = G{k};
        RightAligned(k, 1 + padding:end) = G{k};
    end
    
    但在第二个代码中,向量值被写入零向量的正确位置。

    使用以下方法的解决方案:


    回答得很好,但你错过了正确的答案alignment@Irreducible是的,我错过了问题中的那部分。我现在加上去了。
    A = [11 115 167 44 51 5 6];
    B = [100 1 1 87];
    C = [2000 625];
    D = [81 623 45 48 6 14 429 456 94];
    E = [89];
    F = [44 846 998 2035 498 4 68 4 1 89];
    
    G = {A,B,C,D,E,F};
    
    data = [G{:}];
    N = cellfun(@numel, G);
    M = max(N);
    idx = char((N.' >= (1:M))+32); 
    
    Le = strjust(idx, 'left');
    Ri = strjust(idx, 'right');
    Ce = strjust(idx, 'center');
    
    LeftAdjusted = zeros(M, N);
    RightAdjusted = zeros(M, N);
    Centered = zeros(M, N);
    
    LeftAdjusted(Le.' ~= ' ') = data;
    RightAdjusted(Ri.' ~= ' ') = data;
    Centered(Ce.' ~= ' ') = data;
    
    LeftAdjusted = LeftAdjusted.';
    RightAdjusted = RightAdjusted.';
    Centered = Centered.';