Запуск программы с '& amp;' не делает программу демонами, она просто работает в фоновом режиме. Для создания «истинного демона» ваша программа должна выполнить шаги, описанные здесь здесь .
Если ваша программа написана на C, вы можете вызвать функцию daemon (), которая сделает это для вы. Тогда вы можете запустить свою программу даже без '& amp;' в конце, и он будет запущен как демон.
Другим вариантом является вызов вашей программы с помощью демона , который также должен выполнять задание.
- name: Start daemon
shell: daemon -- myexeprogram arg1 arg2
<
с массивами numpy делает элементарное сравнение. Это означает, что он возвращает массив, где есть True
, где условие истинно и False
, если нет. Здесь нужна строка np.require
, так что она фактически использует массивы NumPy. Вы можете отбросить np.require
, если вы предварительно перепутали свои data
и dt
с np.array
s.
Затем результат добавляется (по элементам) в числовой массив. В этом контексте True
равен 1, а False
равен нулю.
>>> dt < b # which elements are smaller than b?
array([ True, True, False, False, False])
>>> 0 + (dt < b) # boolean arrays in arithmetic operations with numbers
array([1, 1, 0, 0, 0])
Таким образом, он добавляет 1 к каждому элементу из data
, где элемент из dt
меньше 8.
dt
- это список:
In [50]: dt = [6,7,8,9,10]
In [51]: dt < 8
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-51-3d06f93227f5> in <module>()
----> 1 dt < 8
TypeError: '<' not supported between instances of 'list' and 'int'
<
(.__lt__
) для списков не определен.
Но если один элемент сравнения является ndarray
, то применяется определение numpy __lt__
. dt
превращается в массив, и он выполняет сравнение элементов по элементу.
In [52]: dt < np.array(8)
Out[52]: array([ True, True, False, False, False])
In [53]: np.array(dt) < 8
Out[53]: array([ True, True, False, False, False])
операции с массивом numpy также объясняют часть data +=
:
In [54]: data = [1,2,3,4,5] # a list
In [55]: data + (dt < np.array(8)) # list=>array, and boolean array to integer array
Out[55]: array([2, 3, 3, 4, 5])
In [56]: data
Out[56]: [1, 2, 3, 4, 5]
In [57]: data += (dt < np.array(8))
In [58]: data
Out[58]: array([2, 3, 3, 4, 5])
Фактически Я немного удивлен тем, что с +=
data
был изменен из списка в массив. Это означает, что data+=...
реализовано как назначение:
data = data + (dt <np.array(8))
Обычно +
для списка является конкатенацией:
In [61]: data += ['a','b','c']
In [62]: data
Out[62]: [1, 2, 3, 4, 5, 'a', 'b', 'c']
# equivalent of: data.extend(['a','b','c'])
Вы часто можете уйти с используя списки в контекстах массива, но лучше создавать массивы объектов, поэтому вы получаете эти неявные, а иногда и неожиданные конверсии.
Это эквивалент (или краткое или удобное обозначение) для эквивалентной функции: numpy.less()
In [116]: arr1 = np.arange(8)
In [117]: scalar = 6.0
# comparison that generates a boolean mask
In [118]: arr1 < scalar
Out[118]: array([ True, True, True, True, True, True, False, False])
# same operation as above
In [119]: np.less(arr1, scalar)
Out[119]: array([ True, True, True, True, True, True, False, False])
Посмотрим, как этот логический массив может быть добавлен к небулевому массиву в этом случае. Это возможно из-за типа принуждения
# sample array
In [120]: some_arr = np.array([1, 1, 1, 1, 1, 1, 1, 1])
# addition after type coercion
In [122]: some_arr + (arr1 < scalar)
Out[122]: array([2, 2, 2, 2, 2, 2, 1, 1])
# same output achieved with `numpy.less()`
In [123]: some_arr + np.less(arr1, scalar)
Out[123]: array([2, 2, 2, 2, 2, 2, 1, 1])
Таким образом, тип принуждения происходит в булевом массиве, а затем выполняется добавление.