Комбинация буквенных чисел для плавания в Python

      def computefeatures(node_id):
    return [ord(node_id), len(node_id)]

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

мой список:

      ln0
Out[88]: 
0     C1
1     C2
2     C3
3     C4
4     C5
5     C6
6     G1
7     I1
8     O1
9     P1
10    P2
11    P3
12    R1
13    R2
14    R3
15    R4
16    R5
17    R6
dtype: object

1 ответ

Если ваш узел состоит из одной буквы, за которой следует целое число, и все, что вам нужно сделать, это сопоставить их с числами с плавающей запятой, это можно сделать разными способами.

Один из способов - преобразовать ваш node_id в шестнадцатеричную строку того типа, который возвращается методом float (например, (3.14).hex() = '0x1.91eb851eb851fp+1'). Возьми ordбуквы, преобразуйте его в шестнадцатеричную строку и используйте как десятичную часть мантиссы. Возьмите целую часть и используйте ее как показатель степени. После создания строки сопоставьте ее с плавающей точкой с помощью метода класса float.fromhex:

      def compute_feature(node_id):
    n = ord(node_id[0])
    i = node_id[1:]
    hex_string = '0x1.' + hex(n)[2:] + 'p+' + i
    return float.fromhex(hex_string)

Например,

      >>> compute_feature('C1')
2.5234375

У этого подхода есть хорошая особенность: вы можете использовать метод float. hex и небольшой объем синтаксического анализа для восстановления идентификатора узла из числа с плавающей точкой.

Другие вопросы по тегам