我需要帮助解决我的功能问题,我的所有答案都为零
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”
这是您的代码的固定版本。
有不少废话:
- 您在函数开头用常量覆盖了
v1
和 v2
。其次,您用 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)
这是我要解决的问题:
写一个函数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”
这是您的代码的固定版本。
有不少废话:
- 您在函数开头用常量覆盖了
v1
和v2
。其次,您用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)