首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符数组分割成单元格的最有效方法?

将字符数组分割成单元格的最有效方法?
EN

Stack Overflow用户
提问于 2014-08-04 13:31:31
回答 1查看 420关注 0票数 1

我目前正在重写我的一个旧的数据处理函数,我有一个优化问题。该函数的主要目的是处理和编译来自*.csv文件的多达39列1000 large数据,因此我要处理大量的数据。

原始函数对文件中的行数“哑”,只需将textscan读取的数据块与现有数组连接起来。

示例伪码:

代码语言:javascript
复制
some_variable = [] % initialize
while ~feof(fid)
    segarray = textscan(fid, format, chunk_size, 'Delimiter',',');
    some_variable = [some_variable segarray{:,1}];
end

令人痛苦的是,效率低下,但当我写的时候,我不知道更好。

总之,我的新函数利用了一对快速的Perl行(找到了在MATLAB新闻组,我主要在Windows上工作)来计数行数,这样我就可以智能地初始化所有数据数组。

这使我的速度有了很大的提高,但也暴露了一些实现问题,其中之一就是我想问的问题。其中一些列是单个字符字段(%ctextscan格式规范中),textscan在输出时将其连接到单个字符数组中。因此,对于大小为5000的块,该列中的textscan输出是一个5000x1字符数组(没有分隔符)。我想把它分割成一个5000x1单元数组,但是我不知道最有效的方法是什么。

我想出了用过的mat2cellsome_variable = mat2cell(segarray{:,1},ones(length(segarray{:,1}),1),1),它工作得很好,但是有更快的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-04 14:10:43

如果您要检查mat2cell的代码

代码语言:javascript
复制
edit mat2cell  % at Command window

您将看到它的实现非常简单:根据维度分配单元格数组,然后在for循环中使用“切片”输入填充单元格。

这建议建立一个类似的“特殊”功能,只处理以下问题:

代码语言:javascript
复制
function C = str2cell(S)
    N = numel(S);
    C = cell(N, 1);
    for k = 1:N
        C{k} = S(k);
    end;
end

我无法想象比这更快的东西..。而且,与常识相反,在MATLAB的最后一个版本中,for循环速度相当快。

请注意,如果您的S参数是2D矩阵,则该函数将将其“解压”到一行单元格数组输出。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25119898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档