Я пытаюсь преобразовать целое число k с основанием 10 в целое число с основанием q, но не стандартным способом. Во-первых, я хотел бы, чтобы мой результат был вектором (или строкой «a, b, c,...», чтобы ее можно было преобразовать в вектор, но не «abc...»). Самое главное, я бы хотел, чтобы каждая «цифра» была в базе 10. В качестве примера предположим, что у меня есть число 23 (в базе 10), и я хочу преобразовать его в базу 12. Это будет 1B в стандартной нотации 1,...,9,A,B; однако я хочу, чтобы он вышел как [1, 11]. Меня интересуют только числа k с 0 \le k \le n^q - 1, где n фиксировано заранее.
Иными словами, я хочу найти коэффициенты a(r) такие, что k = \sum_{r=0}^{n-1} a(r) q^r
, где каждый a(r) находится в десятичной системе счисления. (Обратите внимание, что 0 \le a(r) \le q-1.)
Я знаю, что мог бы сделать это с помощью цикла for - сейчас я изо всех сил пытаюсь получить точную формулу! -- но я хочу сделать это векторизованным или с быстрой внутренней функцией.
Однако я хочу, чтобы n было большим, поэтому я бы предпочел более быстрый способ, чем этот. (Конечно, я мог бы изменить это на цикл parfor или сделать это на графическом процессоре; это нецелесообразно для моей текущей ситуации, поэтому я бы предпочел более прямую версию.)
Я просмотрел такие вещи, как dec2base, num2str, str2num, base2dec и т. д., но безуспешно. Любое предложение будет высоко оценено.
Что касается скорости и пространства, любое предварительное выделение целых чисел в диапазоне [0, q-1] или подобном тоже было бы хорошо.
Чтобы было ясно, я ищу алгоритм, который работает для любых q и n, преобразуя любое число в диапазоне [0, q ^ n - 1].
floor
,^
и/
уже векторизованы. Петля не нужна. - person excaza   schedule 18.11.2016