Arrays 如何在Matlab中通过消元来修剪一系列阵列

Arrays 如何在Matlab中通过消元来修剪一系列阵列,arrays,matlab,Arrays,Matlab,我想知道是否有一种方法可以在不同大小的数组中循环,并从每个数组的开头修剪数据,以便在每个数组中获得相同数量的元素 例如,如果我有: A = [4 3 9 8 13] B = [15 2 6 11 1 12 8 9 10 13 4] C = [2 3 11 12 10 9 15 4 14] 我想让B和C在开始时失去一些元素,这样它们的长

我想知道是否有一种方法可以在不同大小的数组中循环,并从每个数组的开头修剪数据,以便在每个数组中获得相同数量的元素

例如,如果我有:

 A = [4     3     9     8    13]
 B = [15     2     6    11     1    12     8     9    10    13     4]
 C = [2     3    11    12    10     9    15     4    14]
我想让B和C在开始时失去一些元素,这样它们的长度就变成了5个元素,就像A一样,以实现:

 A = [4     3     9     8    13]
 B = [8     9    10    13     4]
 C = [10     9    15     4    14]
我该怎么做

编辑/更新:

我已经接受了@excaza提出的答案,他编写了一个名为“naivetrim”的漂亮函数。我将该函数保存为.m脚本,然后使用它:首先,我定义了三个数组,并按照@excaza的建议,调用该函数:

 [A, B, C] = naivetrim(A, B, C);
另一个对我有效的解决方案变体——基于@Sardar_Usama下面的答案(循环)。我也喜欢这个,因为它有点简单(以我的级别,我可以跟踪代码中发生的事情)


如果矩阵不多,则可按如下方式进行:

temp = min([numel(A),numel(B), numel(C)]);  %finding the minimum number of elements
% Storing only required elements
A = A(end-temp+1:end);   
B = B(end-temp+1:end);
C = C(end-temp+1:end);

如果矩阵不多,则可按如下方式进行:

temp = min([numel(A),numel(B), numel(C)]);  %finding the minimum number of elements
% Storing only required elements
A = A(end-temp+1:end);   
B = B(end-temp+1:end);
C = C(end-temp+1:end);

一个简单的循环解决方案:

function testcode()
% Sample data arrays
A = [4, 3, 9, 8, 13];
B = [15, 2, 6, 11, 1, 12, 8, 9, 10, 13, 4];
C = [2, 3, 11, 12, 10, 9, 15, 4, 14];

[A, B, C] = naivetrim(A, B, C);
end

function varargout = naivetrim(varargin)
% Assumes all inputs are vectors

% Find minumum length
lengths = zeros(1, length(varargin), 'uint32');  % Preallocate
for ii = 1:length(varargin)
    lengths(ii) = length(varargin{ii});
end

% Loop through input arrays and trim any that are longer than the shortest
% input vector
minlength = min(lengths);
varargout = cell(size(varargin));  % Preallocate
for ii = 1:length(varargout)
    if length(varargin{ii}) >= minlength
        varargout{ii} = varargin{ii}(end-minlength+1:end);
    end
end
end
返回:

A =

     4     3     9     8    13


B =

     8     9    10    13     4


C =

    10     9    15     4    14
如果您有大量的阵列,那么最好使用替代的中间存储数据类型,如或,这样分配和迭代会“更简单”


中可以找到一些不同的类似方法的计时代码


一个简单的循环解决方案:

function testcode()
% Sample data arrays
A = [4, 3, 9, 8, 13];
B = [15, 2, 6, 11, 1, 12, 8, 9, 10, 13, 4];
C = [2, 3, 11, 12, 10, 9, 15, 4, 14];

[A, B, C] = naivetrim(A, B, C);
end

function varargout = naivetrim(varargin)
% Assumes all inputs are vectors

% Find minumum length
lengths = zeros(1, length(varargin), 'uint32');  % Preallocate
for ii = 1:length(varargin)
    lengths(ii) = length(varargin{ii});
end

% Loop through input arrays and trim any that are longer than the shortest
% input vector
minlength = min(lengths);
varargout = cell(size(varargin));  % Preallocate
for ii = 1:length(varargout)
    if length(varargin{ii}) >= minlength
        varargout{ii} = varargin{ii}(end-minlength+1:end);
    end
end
end
返回:

A =

     4     3     9     8    13


B =

     8     9    10    13     4


C =

    10     9    15     4    14
如果您有大量的阵列,那么最好使用替代的中间存储数据类型,如或,这样分配和迭代会“更简单”


中可以找到一些不同的类似方法的计时代码


有多少种不同的数组?
[]
用于MATLAB中的数组/矩阵,而不是
()
有多少种不同的数组?
[]
用于MATLAB中的数组/矩阵,而不是
()
谢谢excaza,作为一个天真的用户,我不太习惯使用函数。我尝试将其保存为naivetrim.m脚本并运行它,但没有任何结果,也没有错误,而且如果我键入“A”,我会得到一个“未定义的函数或变量‘A’”。我不知道我做错了什么。你需要。谢谢,excaza!这似乎是一种通过usign函数进行修剪的聪明方法。但我必须承认,由于我的知识水平,我无法理解如何实现它,因此我无法验证它。从您发送的链接中,我想我忘了输入一些重要的内容,但似乎“function varargout=naivetrim(varargin)”实际上是声明部分。您是将整个帖子保存为
naivetrim.m
还是只保存为
naievetrim
?你打算怎么用?明白了!一开始我保存了整个帖子。现在我只保存了第二个函数,并将其添加到路径中,以便Matlab知道它是什么。我检查了“哪个”以确定它是否能找到它——而且它能找到。然后我只需要输入三个数组和[A,B,C]=naivetrim(A,B,C),它就工作了(在任何其他函数之外)。我想说的是,我发现anivetrim是一个函数,然后我可以在任何我想要的地方使用这个函数。再次感谢。谢谢excaza,作为一个天真的用户,我不太习惯使用函数。我尝试将其保存为naivetrim.m脚本并运行它,但没有任何结果,也没有错误,而且如果我键入“A”,我会得到一个“未定义的函数或变量‘A’”。我不知道我做错了什么。你需要。谢谢,excaza!这似乎是一种通过usign函数进行修剪的聪明方法。但我必须承认,由于我的知识水平,我无法理解如何实现它,因此我无法验证它。从您发送的链接中,我想我忘了输入一些重要的内容,但似乎“function varargout=naivetrim(varargin)”实际上是声明部分。您是将整个帖子保存为
naivetrim.m
还是只保存为
naievetrim
?你打算怎么用?明白了!一开始我保存了整个帖子。现在我只保存了第二个函数,并将其添加到路径中,以便Matlab知道它是什么。我检查了“哪个”以确定它是否能找到它——而且它能找到。然后我只需要输入三个数组和[A,B,C]=naivetrim(A,B,C),它就工作了(在任何其他函数之外)。我想说的是,我发现anivetrim是一个函数,然后我可以在任何我想要的地方使用这个函数。再次感谢。谢谢Sardar_Usama,这看起来很简单。我现在正试图将其作为一个循环来实现。感谢Sardar_Usama,这似乎非常简单。我现在尝试将其实现为一个循环