Вы можете использовать numpy.where
и параметр where
для np.divide
и np.tan
.
np.where(cond, a, b)
дает массив, где значения из a
используются для элементов cond
, которые являются правдивыми, и элементы b
для ложных элементов cond
.
np.divide
и * 1021Аргумент * 'where
говорит им, что они должны выполнять свою работу только в местах, которые являются истинными в другом массиве, и оставлять некоторые другие элементы неинициализированными (чтобы они могли быть чем угодно, но это не имеет значения, потому что мы не собираемсячтобы использовать их здесь).
nonzero = x != 0 # we only care about places where x isn't 0
# Get tan, then divide by x, but only where x is not 0
nonzero_tan = np.tan(x, where=nonzero)
nonzero_tanc = np.divide(nonzero_tan, x, where=nonzero)
# Where x is not zero, use tan(x)/x, and use 1 everywhere else
tanc = np.where(nonzero, nonzero_tanc, 1)
Как предложено hpaulj в их комментарии, вы можете объединить два последних шага, также используя параметр out
в np.divide
для определения значений по умолчаниювыходного массива:
nonzero = x != 0
nonzero_tan = np.tan(x, where=nonzero)
tanc = np.divide(nonzero_tan, x, out=np.ones_like(x), where=nonzero)