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