Sør*_*n J 3 arrays string performance matlab numbers
我有一个名为的数组skj
.skj
包含200万行数字(2000000x1
uint32
).
我想计算以下内容
string_skj = num2str(skj);
Run Code Online (Sandbox Code Playgroud)
当我运行上述行时大约需要1分钟,是否有更快的方法呢?
Hennadii Madan的回答让我想到如果有一种方法可以比标准的Matlab num2str
(或int2str
)更有效地为列向量做这个,并且我提出了2个解决方案.
编辑:在完成所有这些工作之后,@ Luis Mendo进来并把它全部吹出水中:'(
编辑:现在,@ Daniel再次改进了以前的所有选项!
鉴于我们的行向量V
,as
V = uint32(randi(100, 200000, 1));
Run Code Online (Sandbox Code Playgroud)
我们可以达到同样的效果
A = num2str(V);
Run Code Online (Sandbox Code Playgroud)
带*
B = char(strsplit(num2str(V.')).');
Run Code Online (Sandbox Code Playgroud)
或没有错误检查 num2str
C = char(strsplit(sprintf('%d\n', V)).');
C = C(1:end-1, :); % Remove extraneous '\n'
Run Code Online (Sandbox Code Playgroud)
B
并且C
略有不同A
.num2str
带有空间的预垫' '
,同时B
和C
带有空间的垫后垫.
在下面D
并且E
预先填充了0
s,所以不匹配A
,B
或者C
完全匹配.
-----num2str() on row vector [Original]-----
Elapsed time is 3.501976 seconds.
Name Size Bytes Class Attributes
A 200000x3 1200000 char
-----num2str() on column vector [IKavanagh modified from Hennadii Madan]-----
Elapsed time is 0.660878 seconds.
Name Size Bytes Class Attributes
B 200000x3 1200000 char
-----sprintf() on row vector [IKavanagh]-----
Elapsed time is 0.582472 seconds.
Name Size Bytes Class Attributes
C 200000x3 1200000 char
-----dec2base() on row vector [Luis Mendo]-----
Elapsed time is 0.042563 seconds.
Name Size Bytes Class Attributes
D 200000x3 1200000 char
-----myfastint2str() on row vector [Daniel]-----
Elapsed time is 0.011894 seconds.
Name Size Bytes Class Attributes
E 200000x3 1200000 char
Run Code Online (Sandbox Code Playgroud)
clear all
close all
clc
V = uint32(randi(100, 200000, 1));
for k = 1:50000
tic(); elapsed = toc(); % Warm up tic/toc
end
disp('-----num2str() on row vector [Original]-----');
tic;
A = num2str(V);
toc, whos A
disp('-----num2str() on column vector [IKavanagh modified from Hennadii Madan]-----');
tic;
B = char(strsplit(num2str(V.')).');
toc, whos B
disp('-----sprintf() on row vector [IKavanagh]-----');
tic;
C = char(strsplit(sprintf('%d\n', V)).');
C = C(1:end-1, :); % Remove extraneous '\n'
toc, whos C
disp('-----dec2base() on row vector [Luis Mendo]-----');
tic;
D = dec2base(V, 10);
toc, whos D
disp('-----myfastint2str() on row vector [Daniel]-----');
tic;
E = myfastint2str(V);
toc, whos E
Run Code Online (Sandbox Code Playgroud)