J'essaie de convertir un entier de base 10 en un entier de base-q, mais pas de la manière standard. Premièrement, je voudrais que mon résultat soit un vecteur (ou une chaîne 'a, b, c, ...' pour qu'il puisse être converti en vecteur, mais pas 'abc ...'). Plus important encore, j'aimerais que chaque «chiffre» soit en base 10. A titre d'exemple, supposons que j'ai le numéro 23 (en base 10) et que je veuille le convertir en base 12. Ce serait 1B dans la notation standard 1, ..., 9, A, B; Cependant, je veux que cela sorte comme [1, 11]. Je ne m'intéresse qu'aux nombres k avec 0 \ le k \ le n^q - 1, où n est fixé à l'avance.Convertir un entier en base mathématique Matlab
Autrement dit, je voudrais trouver des coefficients a (r) de telle sorte que k = \sum_{r=0}^{n-1} a(r) q^r
où chacun un (r) est dans la base-10. (Notez que 0 \ le a (r) \ le q-1.)
Je sais que je pourrais le faire avec une boucle for - luttant pour obtenir la formule exacte pour le moment! - mais je veux le faire vectorisé, ou avec une fonction interne rapide.
Cependant, je veux être en mesure de prendre n pour être grand, donc je préférerais un moyen plus rapide que cela. (Bien sûr, je pourrais changer cela en une boucle parfor ou le faire sur le GPU, ce n'est pas pratique pour ma situation actuelle, donc je préfère une version plus directe.)
J'ai regardé des choses comme dec2base, num2str, str2num, base2dec et ainsi de suite, mais sans chance. Toute suggestion serait très appréciée. En ce qui concerne la vitesse et l'espace, toute préallocation pour les entiers dans l'intervalle [0, q-1] ou similaire serait également bonne. Pour être clair, je cherche un algorithme qui fonctionne pour tout q et n, convertissant n'importe quel nombre dans l'intervalle [0, q^n - 1].
'floor','^', et'/'sont déjà vectorisés. La boucle n'est pas nécessaire. – excaza
Ah, bien sûr qu'ils le sont! Bien sûr, mon for-loop est des déchets et ne fournit pas ce que je veux du tout = P - laissez-moi juste changer cela ... –