这是我要解决的问题:
编写一个函数 my_is_orthogonal(v1,v2, tol),其中 v1 和 v2 是相同大小的列向量,tol 是严格大于 0 的标量值。如果 v1 和 v2 之间的角度在 tol 之内,则输出应为 1 π/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
and 。v2
其次,您覆盖tol
了print(...) > 0
, ie 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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句