Разделите массив строк на матрицу числовых цифр

#matlab

Вопрос:

Я хочу преобразовать 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]
 

Есть ли векторизованный способ сделать это?

Ответ №1:

Для некоторой базы 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
 

Комментарии:

1. Я принял решение, используя для…конца, но это невыносимо медленно. Я прошу векторизованный, потому что я читал, что векторизованный всегда быстрее.