numpy.arctan2() в Python

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

Синтаксис

numpy.arctan2(x1, x2, /, out=None, *, где=True, casting=`same_kind`, order=`K`, dtype =Нет, subok=True[, подпись, extobj]) = ufunc `arctan2`

Параметры
x1 array_like, вещественное значение

y-координаты.

x2 array_like, действительное значение

x-координаты. Если x1.shape != x2. shape , они должны транслироваться в общую форму (которая становится формой вывода).

out ndarray, None или кортеж из ndarray и None, необязательно

Местоположение, в котором сохраняется результат. Если он предоставлен, он должен иметь форму, в которую транслируются входы. Если не указано или None, возвращается только что выделенный массив. Кортеж (возможен только в качестве аргумента ключевого слова) должен иметь длину, равную количеству выходных данных.

где array_like, необязательный

Это условие передается по входу. В местах, где условие имеет значение True, массив out будет установлен на результат ufunc. В других местах массив out сохранит исходное значение. Обратите внимание, что если неинициализированный массив out создается с помощью out=None< по умолчанию /span>, места в нем, где условие имеет значение False, останутся неинициализированными.

**kwargs

Другие аргументы, содержащие только ключевые слова, см. в документации ufunc .

Возвращает
angle ndarray

Массив углов в радианах в диапазоне [-pi, pi]. Это скаляр, если и x1, и x2 являются скалярами.


Мы рассмотрим NumPy arctan2. Наряду с этим, для лучшего общего понимания, мы также рассмотрим его синтаксис и параметр. Затем мы увидим применение всей теоретической части на нескольких примерах. Но сначала попробуем проанализировать функцию через ее определение. Во-первых, arctan означает обратную функцию tan. Теперь функция NumPy arctan2 помогает нам вычислить значение арктангенса между X1 и X2 в радианах. Здесь X1 и 2 — это параметры, которые мы обсудим позже. По мере того, как мы продвигаемся по этой статье, все становится для вас яснее. Далее рассмотрим синтаксис, связанный с ним.
Метод numpy.arctan2() вычисляет поэлементный арктангенс arr1 / arr2 и правильно выбирает квадрант. Квадрант выбирается таким образом, что arctan2(x1, x2) представляет собой угол со знаком в радианах между лучом, оканчивающимся в начале координат и проходящим через точку (1, 0), и луч, заканчивающийся в начале координат и проходящий через точку (x2, x1).
Arctan2 — обратная функция для 4 квадрантов. Принимая это во внимание, он дает значение от 0 до 2pi. Диапазон этой функции составляет от -180 до 180 градусов. Это 2 ключевых момента, которые отличают Arctan2 от особенностей арктанга.

Разница между Arctan и Arctan2

В этом разделе мы обсудим разницу между двумя функциями Numpy.

< td>arctan — обратная функция для 2 квадрантов.
NumPy arctan< /td>NumPy arctan2
arctan2 — обратная функция для 4 квадрантов.
Диапазон функции arctan от -90 до 90 градусов.Диапазон для arctan2 составляет от -180 до 180 градусов.
Эта функция принимает один массив.Это описанная функция принимает 2 входных массива.
Теперь мы закончили с теоретической частью для NumPy arctan2. В этом разделе рассматривается, как работает эта функция и как она помогает нам получить желаемый результат. Мы начнем с элементарного примера и постепенно перейдем к более сложному примеру.

Пример NumPy Arctan2

импортировать numpy как ppool y=[1,1] x=[1,1.732] print(ppool.arctan2(y,x)) [0.78539816 0.52361148] 
Выше мы видим простой пример нашей функции arctan2. Теперь пройдемся по строчкам и поймем, как мы получили результат. Во-первых, мы импортировали функцию NumPy. Затем мы определили наши 2 набора массива. Используя синтаксис нашей функции и оператор печати, мы получаем желаемый результат. Здесь оба значения даны в радианах. Теперь, если вы хотите проверить результат в некоторой степени. Чтобы сделать это, нам нужно использовать этот конкретный метод:
Угол в градусах = угол в радианах * 180/pi

Если мы произведем вычисления по нашим результатам, мы получим 45 и 30 -градусный ответ. Здесь мы рассмотрели число пи до 3,14. Ответы совпадают, и поэтому результат проверяется.

Numpy Arctan() Пример #2

Теперь предположим, что мы также хотим получить значения в градусах. Это простой процесс, который можно выполнить с помощью цикла for и формулы, описанной выше. Давайте посмотрим, как:
import numpy as ppool Degree=0 y=[-1,1.732] x=[2,1] b=ppool.arctan2(y,x) print(b) для значений в b: Degree= vals*(180/3.14) print(степень) 

Вывод:

[-0.46364761 1.04718485] -26.578525356734104 60.02970472117416 
Посмотрите, как мы получаем значения в радианах и степени. Все шаги аналогичны первому примеру. С той лишь разницей, что мы использовали «цикл for». Если вам нужно что-то более простое, мы также можем использовать другой метод
import numpy as ppool y=[-1,1,1.732] x=[2,1] b=ppool.arctan2(y,x)*(180/3.14) print (b) 
Здесь все, что вам нужно сделать, это умножить значение (180/3,14) или (180/ppool.pi) на массив. Вы определенно можете использовать этот метод в методе цикла for. Но в любом случае вы получите желаемый результат, который является значением градуса.

Вывод:

[-26.57852536 60.02970472] 

NumPy Arctan2 Пример #3

def doa(self, Receiver, Source): ``` Вычисляет направление прихода относительно источника и получателя ``` s_ind = self.key2ind(source) r_ind = self.key2ind(receiver) # вектор от получателя к источнику v = self.X[:,s_ind] - self.X[: ,r_ind] азимут = np.arctan2(v[1], v[0]) высота = np.arctan2(v[2], la.norm(v[ :2])) азимут = азимут + 2*np.pi, если азимут <0. иначе высота азимута = высота + 2*np.pi, если высота <0. иначе высота return np.array([азимут, высота]) 

NumPy Arctan2 Пример #4

def mtx_freq2visi(M, p_mic_x, p_mic_y): """ построить матрицу, которая отображает ряд Фурье в видимость: param M: расширение ряда Фурье ограничено от -M до M:param p_mic_x: вектор, который содержит микрофоны с координатами x:param p_mic_y: вектор, который содержит микрофоны с координатами y:return: """ num_mic = p_mic_x.size ms = np.reshape(np.arange(- М , M + 1, step=1), (1, -1), order=`F`) G = np.zeros((num_mic * (num_mic - 1), 2 * M + 1), dtype=complex, порядок =`C`) count_G = 0 для q в диапазоне (num_mic): p_x_outer = p_mic_x[q] p_y_outer = p_mic_y[q] для qp в диапазоне (num_mic): если нет q == qp: p_x_qqp = p_x_outer - p_mic_x[qp ] p_y_qqp = p_y_outer - p_mic_y[qp] norm_p_qqp = np. sqrt(p_x_qqp ** 2 + p_y_qqp ** 2) phi_qqp = np.arctan2(p_y_qqp, p_x_qqp) G[count_G,:] = ( -1j) ** ms * sp.special.jv(ms, norm_p_qqp) * np.exp(1j * ms * phi_qqp) count_G += 1 return G 

NumPy Arctan2 Пример #5

def vector_angle(u, v, direction=None): ``` vector_angle(u, v) возвращает угол между двумя векторами u и v. Необязательный аргумент direction по умолчанию равен None, который указывает, что наименьший возможный сообщать угол между векторами; если векторы u и v являются двумерными векторами, а параметры направления True и False задают направления по часовой стрелке или против часовой стрелки соответственно; если векторы являются трехмерными векторами, то направление может быть трехмерной точкой, которая не находится в плоскости, содержащей u, v и начало координат, и указывает, вокруг какого направления (uxv или vxu) угол против часовой стрелки от u до v должен быть сообщен (вектор векторного произведения, который имеет положительное скалярное произведение с аргументом направления, используется в качестве оси вращения). ``` если направление равно None: вернуть np.arccos(vector_angle_cos(u, v)) elif direction равно True: вернуть np.arctan2(v[1], v[0]) - np. arctan2(u[1], u[0]) elif direction имеет значение False: return np.arctan2(u[1], u[0]) - np.arctan2(v[1], v [0]) иначе: ось1 = нормализовать (u) ось2 = нормализовать (np.cross (u, v)) если np.dot (ось2, направление) <0: ось2 = -ось2 вернуть np.arctan2(np.dot(axis2, v), np.dot(axis1, v)) 

NumPy Arctan2 Пример #6

def __init__(self, line): data = line.split(` `) data[1:] = [float(x) for x in data[1:]] self.classname = data[0] self.xmin = data[1] self.ymin = data[2 ] self.xmax = data[1]+data[3] self.ymax = data[2]+data[4] self.box2d = np.array([self.xmin,self.ymin,self.xmax,self. ymax]) self.centroid = np.array([data[5],data[6],data[7]]) self.unused_dimension = np.array([data[8],data[9],data[10 ]]) self.w = data[8] self.l = data[9] self.h = data[10] self.orientation = np.zeros((3,)) self.orientation[0] = data[11 ] самоориентация[1] = data[12] self.heading_angle = -1 * np.arctan2(self.orientation[1], self.orientation[0]) 

np.arctan2 Пример #7

def stanleyControl(state, cx, cy, cyaw, last_target_idx): """:param state: (State object):param cx: ([float]):param cy: ([float]): param cyaw: ([float]):param last_target_idx: (int):return: (float, int, float) """ # Ошибка перехода current_target_idx, error_front_axle = calcTargetIndex(state, cx, cy) if last_target_idx >= current_target_idx: current_target_idx = last_target_idx # theta_e исправляет ошибку направления theta_e = normalizeAngle(cyaw[current_target_idx] - state.yaw) # theta_d исправляет ошибку поперечного направления theta_d = np.arctan2(K_STANLEY_CONTROL * error_front_axle, state.v) # Рулевое управление delta = theta_e + theta_d return delta, current_target_idx, error_front_axle 

np arctan2 Пример #8

def calcTargetIndex(state, cx, cy): """:param state: (Объект состояния): param cx: [float]: param cy: [float]: return: (int, float) """ # Расчет положения передней оси fx = state.x + CAR_LENGTH * np.cos(state.yaw) fy = state.y + CAR_LENGTH * np.sin(state.yaw) # Поиск индекса ближайшей точки dx = [fx - icx для icx в cx] dy = [fy - icy для ледяного в cy] d = [np. sqrt(idx ** 2 + idy ** 2) для (idx, idy) в zip(dx, dy)] error_front_axle = min(d) target_idx = d.index(error_front_axle) target_yaw = normalizeAngle(np.arctan2(fy - cy[target_idx], fx - cx[target_idx]) - state.yaw ) if target_yaw > 0.0: error_front_axle = - error_front_axle return target_idx, error_front_axle 

NumPy Arctan2 Пример #9

def Vehicle_flat_reverse(zflag, params={}): # Получить значения параметров b = params.get(`wheelbase`, 3.) # Создать вектор для хранения состояния и входных данных x = np.zeros(3) u = np.zeros(2) # Учитывая плоские переменные, найти состояние x[ 0] = zflag[0][0] # x position x[1] = zflag[1][0] # y position x[2] = np.arctan2(zflag[1][1] ], zflag[0][1]) # tan(theta) = ydot/xdot # И затем решите для входные данные u[0] = zflag[0][1] * np.cos(x[2]) + zflag[1][1] * np.sin(x[2]) thdot_v = zflag[1][2] ] * np.cos(x[2]) - zflag[0][2] * np.sin(x[2]) u[1] = np.arctan2(thdot_v, u[0 ]**2 / b) return x, u # Функция для вычисления RHS динамики системы 

np.arctan2 Пример #10

def GetNeighborCells(self, p, nr, dp = None): ``` Возвращает все ячейки, не превышающие заданное расстояние в любом направлении от указанной ячейки p: Ячейка, из которой нужно получить соседей nr: Радиус соседей dp: Предпочтение направления ``` pi, pj, pk = p tqm = self.qm * self.qp nc = [(pi - i * tqm, pj - j * tqm, pk) для i в диапазоне (-nr, nr + 1) для j в диапазоне (-nr, nr + 1)], если dp не равно None: # Сортировка точек на основе предпочтительного направления dpa = np.arctan2(dp[1], dp[0]) #Получить предпочтительный угол направления #Предпочитать направления в направление дп; сортировка по величине угла от последнего направления nc = sorted(nc, key = lambda t: np.abs(np.arctan2(t[1], t[0]) - dpa)) return nc #Получает текущую трехмерную позицию игрока 
В этой статье мы рассмотрим arctan2 NumPy. Кроме того, мы также видели его синтаксис и параметры. Для лучшего понимания мы рассмотрели несколько примеров. В конце концов, мы можем сделать вывод, что NumPy arctan2 — это функция, которая помогает нам найти обратное значение загара между двумя точками. По умолчанию он возвращает значение в радианах, но мы можем преобразовать его в градусы, используя описанные выше методы. Мы надеемся, что эта статья развеяла все ваши сомнения. Но если у вас остались нерешенные вопросы, не стесняйтесь записывать их в разделе комментариев. Прочитав это, почему бы не прочитать о следующей единичной матрице.

Python atan или atan2, что мне использовать?

Вопрос StackOverflow

Моя формула f=arctan(ImZ/ReZ)

Есть два варианта :

Вариант 1 (атан):

ImZ=-4.593172163003 ImR=-4.297336384845 >>> z=y/x >>> f1=math.atan(z) >>> f1 0.8186613519278327 

Вариант 2 (atan2)

>>> f=math.atan2(y,x) >>> f -2.3229313016619604 

Почему эти два результата различаются?

Ответ:

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

atan2 результаты для каждого x,y

Результат Atan2 всегда находится между -pi и pi.

Ссылка: https://en.wikipedia.org/wiki/Atan2