编程语言
首页 > 编程语言> > python – Matlab中的高效字符串连接

python – Matlab中的高效字符串连接

作者:互联网

前段时间我偶然发现了这个document.它评估了python中几种连接方法的性能.以下是它比较的6种方法中的4种:

Python字符串连接方法

方法1:天真追加

def method1():
    out_str = ''
    for num in xrange(loop_count):
        out_str += `num`
    return out_str

方法4:构建字符串列表,然后加入它

def method4():
  str_list = []
  for num in xrange(loop_count):
    str_list.append(`num`)
  return ''.join(str_list)

方法5:写入伪文件

def method5():
    from cStringIO import StringIO
    file_str = StringIO()
    for num in xrange(loop_count):
        file_str.write(`num`)
    return file_str.getvalue()

方法6:列表推导

def method6():
    return ''.join([`num` for num in xrange(loop_count)])

结果的结论如下:

I would use Method 6 in most real programs. It’s fast and it’s easy to understand. It does require that you be able to write a single expression that returns each of the values to append. Sometimes that’s just not convenient to do – for example when there are several different chunks of code that are generating output. In those cases you can pick between Method 4 and Method 5.

阅读本文后,我意识到我不知道方法5和6.在大多数情况下,我现在更喜欢使用方法5,因为它允许我以与文件相同的方式写入字符串.

我的问题如下,matlab中用于字符串连接的不同技术是什么?我几乎没有在matlab中处理字符串,但是我想出了一个需要我写一个字符串的问题.我想到的一个解决方案是写入临时文件并在完成后读取文件.但在此之前,我决定询问是否有更好的选择.现在这里是matlab中一个天真的附加方法:

Matlab字符串连接方法

方法1:天真追加

function out_str = method1(loop_count)
    out_str = '';
    for num=1:loop_count
       out_str = [out_str num2str(num)]; %#ok<AGROW>
    end
end

Matlab与方法4,5和6中是否有类似的方法可用于效率比较?

编辑:

这里有一些方法类似于python中的方法5(写入文件):

function out_str = method2(loop_count)
    fid = fopen('._tmpfile.tmp', 'w');
    for num=1:loop_count
        fprintf(fid, '%d', num);
    end
    fclose(fid);
    out_str = fileread('._tmpfile.tmp');
end

这是一个简单的测试:

>> tic; tmp1 = method1(100000); toc
Elapsed time is 13.144053 seconds.
>> tic; tmp2 = method2(100000); toc
Elapsed time is 2.358082 seconds.

解决方法:

由于Matlab更喜欢在数组上执行向量化操作,并且在使用for循环时效率很低,因此性能最佳的通用解决方案是创建包含所有字符串的单元格数组,并使用[str_array {:}]或使用strjoin sprintf连接它们(见下文)取决于您的需求.

对于某些操作,例如从数组中创建逗号分隔的字符串,可以使用更有效的解决方案,例如

numeric_array = rand(1 ,100000);
out_str = sprintf('%d,', numeric_array);
out_str = out_str(1:end-1);

因为它一次执行字符串转换和串联.

作为旁注,out_str = sprintf(‘%s’,str_array {:}); out_str = out_str(1:end-1)比使用Matlab 2013a的计算机上strjoin(str_array {:})快约10倍.

标签:python,string-concatenation,matlab,string
来源: https://codeday.me/bug/20190624/1280774.html