Передача набора в качестве параметра в Python

#python #arrays #matrix

#python #массивы #матрица

Вопрос:

Я пытаюсь создать метод на python (и используя numpy), чтобы взять матрицу A и привести ее к форме уменьшенного эшелона строк, используя метод исключения по Гауссу.

Я столкнулся со своей первой проблемой, которая заключается в попытке передать набор в качестве параметра.

Например: def gauss([A]): выдает ошибку, которая была для меня неожиданностью. Почему это?

Кроме того, способ, которым я планирую создавать матрицы (может быть, это единственный способ?) в программе, заключается в следующем:

 a = numpy.array([[1 ,2 ,3] , [4 ,5 ,6] , [7 ,8 ,9]])
  

Итак, я хотел бы иметь возможность передать это a в мой метод gauss(a) , а затем заставить gauss делать ужасные вещи с твоей матрицей

Спасибо

Комментарии:

1. Похоже, вам следует изменить объявление вашей функции на def gauss(A): , а затем привести A к набору внутри функции gauss .

2. На самом деле существует множество способов создания массивов в numpy: docs.scipy.org/doc/numpy/reference/routines . array-creation.html Также имейте в виду, что в numpy матрицы и массивы — это разные объекты.

Ответ №1:

Джошадель прав (в ныне покойном комментарии), что обычно невозможно сказать, что происходит, без некоторого кода и примера вывода, но в этом случае я думаю, что знаю:

 def gauss([A]):
  

недопустимый синтаксис Python. Когда вы объявляете функцию, вы не можете заключать имена параметров в квадратные скобки. Просто используйте

 def gauss(A):
  

И если вы хотите передать матрицу / массив / вложенный список или что-то еще в функцию, просто сделайте это!

 gauss(a)
  

Затем в методе вы можете обрабатывать параметр A как матрицу.

Комментарии:

1. Удалил комментарий непосредственно перед тем, как вы опубликовали это, потому что я понял проблему

Ответ №2:

Некоторая дополнительная информация на случай, если вы новичок в Python и определениях функций в Python.

[A] (т.е. A заключенный в квадратные скобки) является буквальным выражением для создания списка, содержащего A . Так же, как 42 это буквальное выражение для «создания» целого числа 42, ‘foobar’ является буквальным выражением для «создания» строки foobar и т.д.

Таким образом, попытка определить функцию с помощью def gauss([A]): pass не имела бы смысла, так же как попытка определить функцию, подобную def gauss(42): pass , не имела бы смысла.

Однако def gauss(a=20): pass это совсем другая история. В этом случае создается функция с аргументом a и значением по умолчанию, равным 20. В качестве дополнительного примечания, не рекомендуется определять функцию, подобную def gauss(a=[]): pass поскольку [] она изменчива и вызовет проблемы в качестве аргумента по умолчанию.

Как уже предлагали другие def gauss(a): ... , это исправит ваши ошибки.

Ответ №3:

def func(param): так вы определяете функцию. Вы ничего не «передаете» во время определения функции. Работает ли это?

 def gauss(a):
    # do something with `a`

gauss([A])