gpt4 book ai didi

arrays - 如何用元胞数组中的 "string"类型替换所有 "char"类型?

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:45 25 4
gpt4 key购买 nike

上下文

在 R2016b 中,MATLAB 引入了一个新的 string数据类型,除了通常的 char数据类型。到目前为止,一切都很好,但它现在给了我很多关于 JSONlab 的问题。我正在使用的工具箱。

例如,在 R2015b 中,loadjson 返回一个 1x3 单元格字符数组:

dd = loadjson('["Titi", "Toto", "Tata"]')

dd =

'Titi' 'Toto' 'Tata'

但在 R2018a 中,loadjson 返回一个 1x3 string 数组:

dd = loadjson('["Titi", "Toto", "Tata"]')

dd =

1×3 cell array

{["Titi"]} {["Toto"]} {["Tata"]}

问题

为了不必在任何地方更改我的代码,我想修补 loadjson 例程以替换它可能返回的所有 string 类型 char类型。例如,在以下元胞数组中:

test = { 'hello', "world", 0.3; 'how', 'are', "you"}

test =

2×3 cell array

{'hello'} {["world"]} {[0.3000]}
{'how' } {'are' } {["you" ]}

我想替换所有字符串:

cellfun(@isstring, test)

ans =

2×3 logical array

0 1 0
0 0 1

有什么方法可以快速完成(即无需遍历所有元素)?

PS:我知道jsondecodejsonencode将来取代 JSONLab,但到目前为止我只想快速修补东西。

最佳答案

您可以使用 cellstr(令人困惑,尽管“str”建议使用 string)将字符串转换为字符数组而无需循环或 cellfun.. . 文档说明如下:

C = cellstr(A) converts A to a cell array of character vectors. The input array A can be a character array, a categorical array, or, starting in R2016b, a string array.

test = {'hello', "world", 0.3; 'how', 'are', "you"}; % multi-type test cell array
ind = cellfun(@isstring, test); % indexing for string type items
test(ind) = cellstr(test(ind)) % char-ify the strings!

类检查的 cellfun 性能说明:

在我和 Luis 的回答中,cellfun 用于确定哪些元素是字符串。您可以为此任务提高 cellfun 的性能...

根据 cellfun 文档,有一些字符数组选项比对应的函数句柄快得多。对于 isstring 索引,运行其中的第一个可能要快得多:

% rapid
ind = cellfun('isclass', test, 'string');
% akin to looping
ind = cellfun(@isstring, test);

它们具有相同的输出,在一个简单的测试中我看到速度提高了 4 倍:

% Create large test array of random strings
c = cell(100,1000);
c = cellfun(@(x) string(char(randi([65,122],1,10))), c, 'uni', 0);

% Create functions for benchmarking
f=@()cellfun('isclass', c, 'string');
g=@()cellfun(@isstring,c);

% Timing on MATLAB R2017b
timeit( f ) % >> 0.017sec
timeit( g ) % >> 0.066sec

关于arrays - 如何用元胞数组中的 "string"类型替换所有 "char"类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51193098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com