Это проблема, которую я пытаюсь решить:
Напишите функцию my_is_orthogonal(v1,v2, tol), где v1 и v2 — векторы-столбцы одинакового размера, а tol — скалярное значение, строго превышающее 0. Выход должен быть равен 1, если угол между v1 и v2 находится в пределах tol п/2; то есть |π/2−θ < tol|, и 0 в противном случае. Вы можете предположить, что v1 и v2 — векторы-столбцы одинакового размера, а tol — положительная скалярная величина.
Это мой код:
def my_is_orthogonal(v1,v2,tol):
v1 = np.array((1,2,3))
v2 = np.array((2,3,4))
tol = print("Input a number larger than 0!")>0
unit_vector1 = v1 / np.linalg.norm(v1)
unit_vector2 = v2 / np.linalg.norm(v2)
dot_product = np.dot(unit_vector1, unit_vector2)
angle = np.arccos(dot_product)
if abs((pi/2)-angle)<tol:
print("1")
else:
print("0")
return my_is_orthogonal
Это случаи, для которых я должен проверить свой код:
Test cases for problem 2
a = np.array([[1], [0.001]])
b = np.array([[0.001], [1]])
output should be: 1
my_is_orthogonal(a,b, 0.01)
output should be: 0
my_is_orthogonal(a,b, 0.001)
output should be: 0
a = np.array([[1], [0.001]])
b = np.array([[1], [1]])
my_is_orthogonal(a,b, 0.01)
output should be: 1
a = np.array([[1], [1]])
b = np.array([[-1], [1]])
my_is_orthogonal(a,b, 1e-10)*
Но для всех моих случаев ответ, который я получаю, равен нулю "0"
Вам нужно правильно отформатировать код и исправить отступ. Посмотрите справочное руководство по уценке...
Вот исправленная версия вашего кода.
Не обошлось без несуразностей:
v1
и v2
в начале функции константой. Во-вторых, вы перезаписали tol
на print(...) > 0
, т.е. false
(и в качестве побочного эффекта всегда печатали сообщение об ошибке). Другими словами, ваша функция всегда была постоянной.pi
(это не встроенный в Python), поэтому я заменил его на np.pi
.import numpy as np
def my_is_orthogonal(v1, v2, tol):
assert tol > 0, "Tol must be > 0"
unit_vector1 = v1 / np.linalg.norm(v1)
unit_vector2 = v2 / np.linalg.norm(v2)
dot_product = np.dot(unit_vector1, unit_vector2)
angle = np.arccos(dot_product)
return abs((np.pi / 2) - angle) < tol
a = np.array([1, 0.001])
b = np.array([0.001, 1])
c = np.array([1, 1])
d = np.array([1, -1])
assert my_is_orthogonal(a,b, 0.01)
assert not my_is_orthogonal(a, b, 0.001)
assert not my_is_orthogonal(a, c, 0.01)
assert my_is_orthogonal(c, d, 1e-10)
Возможно, вам не следует перезаписывать
v1
иv2
в начале вашей функции? :-)