Мне нужна помощь с моей функциональной проблемой, я получаю ноль за все мои ответы

Это проблема, которую я пытаюсь решить:

Напишите функцию 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 в начале вашей функции? :-)

AKX 17.05.2022 12:30

Вам нужно правильно отформатировать код и исправить отступ. Посмотрите справочное руководство по уценке...

Bill 17.05.2022 12:31
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
3
2
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот исправленная версия вашего кода.

Не обошлось без несуразностей:

  • Вы перезаписали v1 и v2 в начале функции константой. Во-вторых, вы перезаписали tol на print(...) > 0, т.е. false (и в качестве побочного эффекта всегда печатали сообщение об ошибке). Другими словами, ваша функция всегда была постоянной.
  • У вас не должно быть функции, печатающей 1 или 0, но возвращающей значение. (Ранее вы вернули саму функцию, что звучит как MATLABism, но не имеет смысла в Python).
  • Вы не показывали свой импорт 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)

Другие вопросы по теме