簡體   English   中英

在MATLAB上驗證矩陣值

[英]Verify a matrix value on MATLAB

我正在使用MATLAB。 我有一個關於如何驗證矩陣值正在重復的問題,如下所示:

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

如果矩陣A對於之后的所有列至少重復前兩個值,則我希望AUX = 1,但如果不是,則僅AUX = 0。

如果A是行向量或列向量,則下面的單行代碼有效,但如果它是矩陣,則不一定有效(感謝@Dan簡化了注釋)。 我認為這是可以的,因為您在問題中提供的示例是向量。

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

此矢量化解決方案應該比@Nirk提供的非矢量化解決方案快得多(對於大A )。

根據您的應用程序,您可能需要包括錯誤陷阱:

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

請注意,有關處理案例size(A, 2) < 3一些替代方法,請參見此答案的注釋。

這是另一種簡單的方法:

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

基本上,這檢查所有奇數元素是否均等於第一個元素,所有偶數元素均等於第二個元素。

我想提出另一種方法。 正如我所看到的,當您要求“重復”時,也許您想重復相同的“模式”。 為此,很容易濫用字符串函數。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM