2013-12-12 62 views
0

在任何人問起之前,這是前一個問題的轉貼,但我不能刪除它,因爲它有答案,所以我正在修改它,以便Daniel R有希望回答它!在矩陣中使用strfind在矩陣中的不同對角線方向

我有一個數字網格,我想在8個方向中的任何一個方向上讀strfind的一串數字。非對角線的我已經設法正常工作,這是我一直在努力的對角線(除了丹尼爾R早些時候幫助我的downRight,我非常感謝)!

下面是代碼:

A = [5,16,18,4,9; 
    9,10,14,3,18; 
    2,7,9,11,21; 
    3,7,2,19,22; 
    4,9,10,13,8] 

for r = 1:5 
    for diags = -5:5 
     downRight = strfind(diag(A,diags)', [10,9,19]); 
     if isempty(downRight) == 0; 
      rowOfFirstNum = downRight(1)+max(-diags,0); 
      columnOfFirstNum = downRight(1)+max(diags,0); 
     end 
     downLeft = strfind(diag(rot90(A),diags)', [11,2,9]); 
     if isempty(downLeft) == 0; 
      %rowOfFirstNum = 
      %columnOfFirstNum = 
     end 
     upLeft = strfind(diag(rot90(A,2),diags)', [19,9,10]); 
     if isempty(upLeft) == 0; 
      %rowOfFirstNum = 
      %columnOfFirstNum = 
     end 
     upRight = strfind(diag(rot90(A,3),diags)', [3,7,14,4]); 
     if isempty(upRight) == 0; 
      %rowOfFirstNum = 
      %columnOfFirstNum = 
     end 
    end 
end 

downRight的作品,但我不知道如何獲得別人的正常工作。需要注意的是,爲了測試每個方向,其他3個需要註釋掉。

謝謝。

回答

1

一個問題親自解決了我,可能是我必須寫一個答案:)

無需實現所有4個的情況下,我寫了一個通用的情況。正如您已經注意到的那樣,這4種情況可以使用rot90rot90(X,0)什麼都不做)來生產。

爲了獲得索引,我創建了一個包含行號和列號的網格。簡單地通過與rot90diag相同的過程,以查看哪個索引已移到該位置。

最後,外環(for r = 1:5)簡單地重複所有內容。

A = [5,16,18,4,9; 
    9,10,14,3,18; 
    2,7,9,11,21; 
    3,7,2,19,22; 
    4,9,10,13,8]; 
[col,row]=meshgrid(1:size(A,1)); 


x=[10,9,19]; 
% x=[11,2,9]; 
% x=[19,9,10]; 
% x=[3,7,14,4]; 
for diags = -5:5 
    for direction=0:3 
     loc = strfind(diag(rot90(A,direction),diags)', x); 
     if ~isempty(loc) 
      colT=diag(rot90(col,direction),diags); 
      rowT=diag(rot90(row,direction),diags); 
      rowOfFirstNum=rowT(loc) 
      columnOfFirstNum=colT(loc) 
      switch direction 
      case 0 
       %code for downRight 
      case 1 
       %code for downLeft 
      case 2 
       %code for upLeft 
      case 3 
       %code for upRight 
      end 
     end 
    end 
end 
+0

謝謝。雖然抱歉,還有一個問題。我之前編寫它的方式允許我爲每個方向分別計算rowOfLastNum和columnOfLastNum(我希望名稱是自解釋的),因爲它是行/列的增加或減少的組合。我如何用通用代碼實現這一點? – user3094936

+0

我添加了一個空的開關箱表達式。使用與此相似的內容來添加特定於某個方向的代碼。 – Daniel

+0

非常感謝您的幫助,我非常感謝。我可以再問你一件事嗎?這個詞搜索是從圖像中讀取的(整數是字母位置),因此使用分類器對每個字母進行分類。分類器效率很高(大約95%),但是這意味着在整個文字搜索中大約有10個字母是錯誤的。我有一個函數可以計算任意兩個單詞之間的編輯距離。有沒有一種方法可以用它來確定一個單詞在某些字母被誤分類時的位置? – user3094936