2015-07-10 61 views
-2

我有 A = [ 'X8' 'X7' '無' '無' 'x9.1'] 我要轉換爲 B = [8 7 0 0 9.1](數字) Matlab代碼?轉換字符串細胞

我試過了:

ind = strcmp(A,'None');
f2 = A(ind == 0); %'x_'條款
data = cellfun(@(x)x(2:end),f2,'UniformOutput',false); %刪除x的數字
f3 = sprintf('%s *',data {:});
N = sscanf(f3,'%f *'); %轉換爲數字

它將'x8'轉換爲8,但我仍然有'無'值。 任何解決方案在同一時間?

感謝

+0

你嘗試過什麼嗎?請發佈您嘗試過的內容。 – kittykittybangbang

+0

A = [..]不是一個單元格 – Daniel

+0

要跟隨丹尼爾的評論,難道你沒有'A = {'x8''x7'''''''''x9.1'}'? –

回答

0

你可以達到你想要的東西,像這樣:

要以0替換包含「無」的細胞,只要做到這一點:

這些細胞的查找索引(因爲你已經完成):

idx = strcmp(A,'None'); 

然後分配0到這些指數,包含在{大括號}因爲你把它們放入一個單元陣列:

A(idx) = {0}; 

現在對於其他項目,使用cellfun你與其他指數一樣,一路上將雙打:

A(~idx) = cellfun(@(x) str2double(x(2:end)),A(~idx),'uni',0) 

現在A如下單元陣列:

A = 

    [8] [7] [0] [0] [9.1000] 

,您可以將其轉換爲數值數組,因爲所有條目都是數字:

A = cell2mat(A) 

A = 

    8.0000 7.0000   0   0 9.1000 

當然,您可以將最後2個步驟合併爲一個。

耶!

+0

謝謝!!我對單元格不熟悉,我正在使用()而不是{} –

+0

太棒了!如果答案有幫助,並且您不需要進一步的幫助,您是否會介意點擊綠色複選標記以將其標記爲已接受?謝謝! –