将字符串数组拆分为数字矩阵

Split array of strings into a matrix of numeric digits

我想将 n 个整数转换为 b 进制,并将每个数字作为一个数字写入矩阵。

我得到基数 b 表示:

stringBaseB=dec2base(0:1:1000,b,10)

但不知道如何将每个字符串拆分成一个字符

[[0,0,0,0];[0,0,0,1];[0,0,0,2];...]

我可以使用 array2table 拆分单个字符:

tableBaseB=array2table(dec2base(stringBaseB,b,10))

但这不是数字矩阵。此外,在基数 b>10 中,我得到字母数字字符,我需要通过

等等价将其转换为数字
alphanumeric=["1","A","c","3"]
numericEquivalence=[1,1+i,-3,0]

有矢量化的方法吗?

对于某些基数 b < 11,其中来自 dec2base 的字符数组始终是一位数字字符,您可以简单地执行

b = arrayfun( @str2double, stringBaseB );

对于某些通用基础 b,您可以在字符和值(您的 numericEquivalence)之间建立映射

charMap = containers.Map( {'1','2','3'}, {1,2,3} );

然后你可以使用 arrayfun(没有严格按照你的要求“矢量化”,但不清楚为什么这是一个要求)

stringBaseB=dec2base(0:1:1000,b,10);
b = arrayfun( @(x)charMap(x), stringBaseB );

这为您提供了一个数字输出数组,例如 stringBaseB=dec2base(0:5,3,10) 给出了

stringBaseB =
  6×10 char array
    '0000000000'
    '0000000001'
    '0000000002'
    '0000000010'
    '0000000011'
    '0000000012'

b =
  6x10 double array
     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     1
     0     0     0     0     0     0     0     0     0     2
     0     0     0     0     0     0     0     0     1     0
     0     0     0     0     0     0     0     0     1     1
     0     0     0     0     0     0     0     0     1     2