String是一個單元陣列
那麼,不是真的..這是一個矩陣,但繼續閱讀。
我想單元格數組是MATLAB中最神祕的數據類型。因此,讓我們神祕性有點;-)
假設
fruits = {...
'banana',...
'apple',...
'orange'...
}
首先整數索引不需要爲小數組。使用foreach -like構造好得多。事實上,
for index = 1:numel(fruits)
fruits{index}
end
相當於
for fruit = fruits
fruit
end
吧?
嗯,不完全。第一個循環產生字符串,而第二個循環產生字符串。可以用
for index = 1:numel(fruits)
[isstr(fruits{index}) iscell(fruits{index})]
end
for fruit = fruits
[isstr(fruit) iscell(fruit)]
end
,即[1 0]和[0 1]檢查它。
如果你有現貨差異,那麼你必須知道如何處理下一個例子(在這一個真的與你的問題(!)我保證!)。假設你嘗試做橫向拼接在一個循環:
for fruit = fruits
[fruit 'is a fruit']
end
你會得到
ans =
'banana' 'is a fruit'
等。爲什麼?顯然,這段代碼試圖將一個嵌套的單元格數組連接到一個字符串(一個單元格數組包含一個構成像'香蕉'字符串的字符矩陣)。所以,正確的答案是
使用{:}
for fruit = fruits
[fruit{:} 'is a fruit']
end
奇妙的本已產生預期的'香蕉是水果','蘋果是水果'等
提示
一些提示:
- 免費索引循環與結構很好地工作在
for fruit = [fieldnames][1](fruits)'
- 以上是真開源倍頻
- 香蕉不僅是水果,在分類學上這也是一種草藥;-)就像「香蕉」在MATLAB中既是一個字符串又是一個矩陣,即斷言(isstr('banana'))& & ismat('banana'))通過,但assert(iscell('banana'))失敗。
{:}
相當於cell2mat
PS
你的問題的解決方案可能是這樣的:
鑑於
vcell = {...
'v' 576.5818 3.0286 576.9270;
'v' 576.5818 3.0286 576.9270
}
隱蔽指數明智僅數值類型爲字符串
vcell(cellfun(@isnumeric, vcell)) = cellfun(@(x) sprintf('%.5f', x), vcell(cellfun(@isnumeric, vcell)), 'UniformOutput', false)
以上代碼輸出
VCELL =
'v' '576.58180' '3.02860' '576.92700'
'v' '576.58180' '3.02860' '576.92700'
可級聯。
要走的路!永遠不要說挖掘從來沒有幫過任何人。 –
調用多餘的函數調用'sprintf'一個黑客 - 是一個大聲笑 –