Комбинация буквенных чисел для плавания в 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
и небольшой объем синтаксического анализа для восстановления идентификатора узла из числа с плавающей точкой.