2

我正在使用 MATLAB。我有一个关于如何验证矩阵的值是否重复的问题,如下所示:

A=[ 2 3 2 3 2 3 2 3]

如果矩阵 A 至少重复所有列的前两个值,我想要 AUX = 1。但如果不是,只有 AUX = 0。

4

3 回答 3

2

如果是行向量或列向量,则以下单行有效A,但如果它是矩阵则不一定有效(感谢@Dan 在注释中提供了简化)。我认为这没关系,因为您在问题中提供的示例是向量。

AUX = ~any(A(3:end) - A(1:end-2))

这个矢量化解决方案应该比@Nirk 提供的非矢量化解决方案快很多(对于 large A)。

根据您的应用程序,您可能需要包含错误陷阱:

if size(A, 2) < 3; error('Input matrix needs to have at least 3 columns'); end

请注意,有关处理该案例的一些替代方法,请参阅对此答案的评论size(A, 2) < 3

于 2013-09-30T05:33:11.740 回答
1

这是另一种简单的方法:

AUX = all(A(1) == A(1:2:end)) && all(A(2) == A(2:2:end))

基本上这会检查所有奇数元素是否等于第一个元素,以及所有偶数元素是否等于第二个元素。

于 2013-09-30T09:07:47.317 回答
0

我想提出另一种方法。正如我在您要求“重复”时看到的那样,也许您希望重复相同的“模式”。为此,很容易滥用字符串函数。

A=[1,2,3,4,1,2,3,4,1,2,3]
position_repetition = strfind(A,A(1:2))

我想你可以使用regexp更复杂的模式。像这样将检查重复的最长模式:

tmp = regexp(char(A),'(?<group>.+)\1+','names')
group = double(tmp.group)

这应该是我理解的问题 - 它检查它是否是前两个条目的重复:

A=[1,2,3,4,1,2,3,4,1,2,3,4]
tmp = regexp(char(A),'^(?<group>..)\1+$','names')
AUX = ~isempty(tmp)
于 2013-09-30T09:17:08.723 回答