整数的num2str更快?

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分钟,是否有更快的方法呢?

IKa*_*agh 5

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带有空间的预垫' ',同时BC带有空间的垫后垫.

在下面D并且E预先填充了0s,所以不匹配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)