我在那裏我試圖通過匹配字符串來過濾非常簡單的例子:如何在Matlab/Octave中過濾我的數組數組?
A = [0:1:999];
B = A(int2str(A) == '999');
這
A(A > 990);
工作
這
int2str(5) == '5'
也適用
我只是不明白爲什麼我不能把兩個放在一起。我收到有關不一致參數的錯誤。
我在那裏我試圖通過匹配字符串來過濾非常簡單的例子:如何在Matlab/Octave中過濾我的數組數組?
A = [0:1:999];
B = A(int2str(A) == '999');
這
A(A > 990);
工作
這
int2str(5) == '5'
也適用
我只是不明白爲什麼我不能把兩個放在一起。我收到有關不一致參數的錯誤。
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'
我不知道該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)
要快很多,正確打開字符串轉換成數字,比周圍的其他方法。嘗試
B = A(A == str2double ('999'));
是否有任何理由不能將字符串'999'轉換爲值? – YYC 2013-04-28 00:40:45