Выполнение numpy vs pandas [duplicate]

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

Однако есть один случай, когда безопасно удалять элементы из последовательности, которую вы выполняете: если вы удаляете только один элемент во время повтора. Это может быть обеспечено с помощью return или break. Например:

for i, item in enumerate(lst):
    if item % 4 == 0:
        foo(item)
        del lst[i]
        break

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

25
задан Saullo G. P. Castro 8 May 2014 в 21:07
поделиться

2 ответа

Могут быть значительные различия в производительности, на порядок величины для умножений и несколько порядков величины для индексации нескольких случайных значений.

Я действительно интересовался тем же самым и наткнулся на это интересное сравнение: http://penandpants.com/2014/09/05/performance-of-pandas-series-vs-numpy-arrays/

14
ответ дан Mark 31 August 2018 в 09:36
поделиться

Я думаю, что это больше связано с использованием двух стратегически и смещающихся данных (от numpy до pandas или наоборот) в зависимости от производительности, которую вы видите. В качестве недавнего примера я пытался объединить 4 маленьких файла pickle с 10k строками каждый data.shape -> (10,000, 4) с помощью numpy.

Код был примерно таким:

n_concat = np.empty((0,4))
for file_path in glob.glob('data/0*', recursive=False):
    n_data = joblib.load(file_path)
    n_concat = np.vstack((co_np, filtered_snp))
joblib.dump(co_np, 'data/save_file.pkl', compress = True)

Это разбило мой ноутбук (8 ГБ, i5), что было удивительно, поскольку объем не был действительно , что огромный. 4 сжатых маринованных файла были примерно около 5 МБ каждый.

То же самое, отлично работает на пандах.

for file_path in glob.glob('data/0*', recursive=False):
    n_data = joblib.load(sd)
    try:
        df = pd.concat([df, pd.DataFrame(n_data, columns = [...])])
    except NameError:
        df = pd.concat([pd.DataFrame(n_data,columns = [...])])
joblib.dump(df, 'data/save_file.pkl', compress = True)

С другой стороны, когда я выполнял градиентный спуск по итерации по кадру данных pandas, он был ужасно медленным, а использование numpy для задания было намного быстрее.

В общем, я видел, что панды обычно лучше работают, перемещаясь / перемещая умеренно большие куски данные и выполнение общих операций с столбцами, в то время как numpy лучше всего подходит для векторизованной и рекурсивной работы (возможно, более интенсивной работы с математикой) по более мелким наборам данных.

Перемещение данных между этими двумя является беспроблемным, так что, полагаю, стратегически - путь.

2
ответ дан Gaurav 31 August 2018 в 09:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: