Я ищу элегантный (или более элегантный) способ кодирования конкретного варианта использования в numpy. Вариант использования - это большой набор данных (поэтому имеет значение эффективность) со 100 + полями, более 1000 строк кода и несколькими разделами кода, где я хотел бы обрабатывать только подмножество полей. Пока я обработка всех наблюдений, это экологически чистый и эффективный в простом NumPy:Нанесите маску на несколько строк (синтаксический сахар?)
wages = np.arange(40000,60000,2000)
cg = np.arange(0,100000,10000)
ded = np.repeat([6000,9000],5)
exem = np.repeat([2000,4000],5)
agi = wages + cg
tinc = agi - ded
tinc = tinc - exem
Но во многих кодовых подразделов я хочу обрабатывать только подмножество наблюдений, скажем, 30 строк кода и это лучшее, что я могу придумать:
agi = wages + cg
mask = wages < 50001
tinc = agi
tinc[mask] = agi[mask] - ded[mask]
tinc[mask] = tinc[mask] - exem[mask]
это не ужасно, не поймите меня неправильно, но умножить это на 100е переменных и сотни строк кода. Есть ли способ сделать что-то вроде следующего, не прибегая к цитонам cython/numba?
# fake code, just to convey the desired syntax
agi = wages + cg
tinc = agi
mask(wages < 50001): # i.e. inside a python loop, would be "if wages < 50001:"
tinc = agi - ded
tinc = tinc - exem
Другими словами, я хотел бы определить подразделы кода и указать, что точно такая же маска должна применяться к каждому массиву в секции кода, без явного ввода маски для каждого поодиночке массива.
(Кстати, я знаю, что могут быть некоторые альтернативные подходы через панд, но сейчас предпочел бы, чтобы исследовать мой лучший вариант через NumPy. Я могу повторно задать этот вопрос с пандами теге позже.)
Да, мне нужно подумать, хочу ли я это делать или нет! Но может быть единственным в numpy. Благодаря! – JohnE