我需要帮助解决我的功能问题,我的所有答案都为零

I need Assistance with my Function Problem, I am getting zero for all my answers

这是我要解决的问题:

写一个函数my_is_orthogonal(v1,v2, tol),其中v1和v2是大小相同的列向量,tol是严格大于0的标量值。如果v1 和 v2 之间的角度在 π/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”

这是您的代码的固定版本。

有不少废话:

  • 您在函数开头用常量覆盖了 v1v2。其次,您用 print(...) > 0 覆盖了 tol,即 false(作为副作用,总是会打印一条错误消息)。换句话说,你的函数总是不变的。
  • 您不应该让函数打印 1 或 0,而是 return 一个值。 (您之前 return 编辑了函数本身,这听起来像 MATLABism,但在 Python 中没有意义)。
  • 您没有显示 pi 的导入(它不是 Python 中的 built-in),所以我将其替换为 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)