簡體   English   中英

在MATLAB中計算矩陣中相鄰非零值數量的簡單方法?

[英]Simple way in matlab to count number of adjacent non-zero values in matrix?

我是Matlab的新手,我必須在matlab上創建掃雷游戲,在該游戲中,我會生成一個隨機的矩陣A,其值為1和0,其中1為地雷,0為非零。 然后,我必須創建一個矩陣B,其中每個元素都必須是矩陣A中相鄰礦井(或多個礦井)的數量。這些礦井(或多個礦井)在矩陣B中變為10s。

例如,如果A = [0 1 0 1 0 1]

B = [2 10 2 10 3 10]

我不知道如何設置矩陣B,以便它可以計算矩陣A的相鄰元素的數量並為每個元素設置它。 有沒有簡單的方法可以做到這一點?

我認為您的B向量應為[1 10 2 10 2 10]

對於矢量情況,可以執行以下操作。

B=zeros(size(A)); %// to initialise the B vector as 0's

然后,要獲取每個位置附近有多少個地雷,您只需將數字加到該位置的左側和右側即可。 請記住,在終點處只能有地雷的左側或右側。

B(2:end-1)=A(1:end-2)+A(3:end); %// counting mines on both sides
B(1)=A(2); %// only on the right of the first location
B(end)=A(end-1); %// only on the end at the last location

然后將10放在地雷中,您可以使用邏輯索引在A找到1,然后在B中將這些位置變為10。

B(A==1)=10; %// find where A=1 (mines) and set the element of B to 10

相同的方法適用於矩陣,但是您必須小心處理每個位置周圍的所有元素,並且還必須小心邊界。

您也可以使用卷積

A=[0 1 0 1 0 1];
B=ones(1,3);
B(2) = 0;
R=conv(A,B, 'same');
R(find(A==1))= 10      

R =

1   10    2   10    2   10

B是您要考慮的鄰居。 您需要兩個最接近的鄰居加上實際值,因此B1x3向量。

A=[0 1 0 1 0 1];
B=ones(1,3);

您只需要相鄰的值,因此將中心點設置為零

 B(2) = 0;

AB卷積。 使用same選項,以使輸出具有與輸入相同的大小。

R=conv(A,B, 'same');

10替換您的地雷。

R(find(A==1))= 10 

二維

您可能希望以二維方式獲取當前單元周圍的地雷數。 然后,您只需創建一個19x9鄰域,然后AB以2D卷積即可。

A=ones(10);
A(2:2:end, 2:2:end) = 0 % Create your grid. Every other cell is a mine.
B=ones(3);
B(2,2) = 0  % Exclude the current cell
R=conv2(A,B,'same');

暫無
暫無

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

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