2013-04-27 54 views
0

我在那裏我試圖通過匹配字符串來過濾非常簡單的例子:如何在Matlab/Octave中過濾我的數組數組?

A = [0:1:999]; 
B = A(int2str(A) == '999'); 

A(A > 990); 

工作

int2str(5) == '5' 

也適用

我只是不明白爲什麼我不能把兩個放在一起。我收到有關不一致參數的錯誤。

+0

是否有任何理由不能將字符串'999'轉換爲值? – YYC 2013-04-28 00:40:45

回答

1

int2str(A)會產生一個非常長的數組(包含大小爲1 x 4996),該數組包含所有這些數字(包括間距)的字符串表示形式,這些數字(包括間距)首尾相連。

int2str(A) == '999' 

所以,在上面的語句中,你試圖尺寸1 x 4996的矩陣比較其他尺寸1 x 3的。這當然是失敗的,因爲兩者需要具有相同的規模,或者至少有一個需要成爲標量,在這種情況下,應用標量擴展規則。

A(A > 990); 

上述工作是因爲邏輯索引規則,其結果將是從A針對該條件成立的索引的元素。

int2str(5) == '5' 

這僅適用於因int2str調用的結果是1 x 1矩陣('5')和你比較它與同樣大小的另一個矩陣。嘗試int2str(555) == '55',它會失敗,並出現與上述相同的錯誤。

我不知道是什麼導致你從原來的陳述預期,但也許你正在尋找這樣的:

A = [0:1:999]; 
B = int2str(A(A == 999)) % outputs '999' 
0

我不知道該int2str()轉換是你在找什麼。 (另外,爲什麼你需要的數字轉換爲字符串,然後進行字符比較?)

假設你有一個簡單的情況:

A = 1:3; 
strA = int2str(A) 
strA = 
1 2 3 

注意,這是一個1X7字符數組。因此,比較這對一個標字符:

strA == '2' 
ans = 
    0  0  0  1  0  0  0 

現在,你可能想轉A和進行比較:

int2str(A')=='2' 
ans = 
    0 
    1 
    0 

然而,這種做法是行不通的,如果每一位數數字不一樣,因爲較低的數字將用空格填充(嘗試創建A = 1:10並與'2'進行比較)。

然後,創建的字符串單元陣列沒有空格和使用strcmp()

csA = arrayfun(@int2str,A','un',0) 
csA = 
    '1' 
    '2' 
    '3' 

strcmp('2',csA) 
0

要快很多,正確打開字符串轉換成數字,比周圍的其他方法。嘗試

B = A(A == str2double ('999'));