Ответ JoeCondron (EDIT: до его последнего редактирования!) классный, но есть преимущество для значительного улучшения, избегая не-векторизации перечисления:
def get_first_non_null_vect(df):
a = df.values
col_index = np.isnan(a).argmin(axis=1)
return a[np.arange(a.shape[0]), col_index]
Улучшение является небольшим, если DataFrame относительно плоский:
In [4]: df = pd.DataFrame(np.random.choice([1, np.nan], (10000, 1500), p=(0.01, 0.99)))
In [5]: %timeit get_first_non_null(df)
10 loops, best of 3: 34.9 ms per loop
In [6]: %timeit get_first_non_null_vect(df)
10 loops, best of 3: 31.6 ms per loop
... но может иметь значение для slim DataFrames:
In [7]: df = pd.DataFrame(np.random.choice([1, np.nan], (10000, 15), p=(0.1, 0.9)))
In [8]: %timeit get_first_non_null(df)
100 loops, best of 3: 3.75 ms per loop
In [9]: %timeit get_first_non_null_vect(df)
1000 loops, best of 3: 718 µs per loop
По сравнению с векторизованной версией JoeCondron время выполнения очень (это все же немного быстрее для тонких DataFrames и немного медленнее для больших).
Найдите модуль в sysfs дереве. В этом случае это было в
/sys/bus/usb-serial/drivers/cp2101
В этом каталоге, существует new_id
запись файла, которая может использоваться для динамичного добавления пары PID VID как это:
echo VID PID >new_id
Вот запись LWN об этой функции
Вы не должны на самом деле перекомпилировать целое ядро, перекомпилировать только соответствующий модуль ядра с обновленной таблицей соответствия будет достаточно, в случае, если это этот ответ, не работает над Вашим ядром.