1 Вопрос: Есть ли более быстрый способ конвертировать большой файл из hexa в двоичный файл и двоичный в int?

вопрос создан в Fri, Mar 29, 2019 12:00 AM

У меня большой DataFrame (1999048 строк и 1col) с шестнадцатеричными данными. Я хочу поместить каждую строку в двоичную форму, разрезать ее на части и преобразовать каждую часть в десятичном формате.

Я попробовал это:

for i in range (len(df.index)):
    hexa_line=hex2bin(str(f1.iloc[i]))[::-1] 
    channel = int(hexa_line[0:3][::-1], 2)     
    edge = int(hexa_line[3][::-1], 2)      
    time = int(hexa_line[4:32][::-1], 2)   
    sweep = int(hexa_line[32:48][::-1], 2)  
    tag = int(hexa_line[48:63][::-1], 2)   
    datalost = int(hexa_line[63][::-1], 2)   
    line=np.array([[channel, edge, time, sweep, tag, datalost]])
    tab=np.concatenate((tab, line), axis=0)

Но это действительно очень долго .... Есть ли более быстрый способ сделать это?

    
0
  1. Я не совсем уверен, почему вы делаете это в пандах, но это, вероятно, не большая часть ваших накладных расходов.
    2019-03-29 10: 53: 01Z
1 ответ                              1                         

единственная вещь, которую я могу себе представить, - это изменить эти строки:

line=np.array([[channel, edge, time, sweep, tag, datalost]])
tab=np.concatenate((tab, line), axis=0)

конечно, в пандах, и я думаю, что и в numy concatting это дорогая вещь, и она зависит от размера общего размера обоих массивов (а не, скажем, list.append)

Я думаю, что это делает перезаписывать весь массив tab каждый раз, когда вы вызываете его. Возможно, вы могли бы попробовать добавить каждую строку в список, а затем объединить весь список.

например, что-то вроде этого:

tab = []
for i in range (len(df.index)):
    hexa_line=hex2bin(str(f1.iloc[i]))[::-1] 
    channel = int(hexa_line[0:3][::-1], 2)     
    edge = int(hexa_line[3][::-1], 2)      
    time = int(hexa_line[4:32][::-1], 2)   
    sweep = int(hexa_line[32:48][::-1], 2)  
    tag = int(hexa_line[48:63][::-1], 2)   
    datalost = int(hexa_line[63][::-1], 2)   
    line=np.array([[channel, edge, time, sweep, tag, datalost]])
    tab.append(line)

final_tab = np.concatenate(tab, axis=0)
# or whatever the syntax is :p
    
0
2019-03-29 11: 01: 02Z
  1. Да, спасибо, это намного быстрее! Я использую concatenate снова в следующем коде, я посмотрю, смогу ли я от него избавиться ...
    2019-03-29 13: 25: 25Z
  2. @ JRLCAR, если мой ответ помог вам, не стесняйтесь поднять /пометить его как принятый. :)
    2019-03-29 14: 03: 55Z
источник размещен Вот