2016-11-11 3 views
0

У меня есть эта функция, которая работает, как ожидалосьпередавая необязательные аргументы как строки или Arays

import numpy as np 
def my_fun(X, Weights = None): 
    if Weights is None: 
      np.random.normal(0,1,1) 
    else: 
      Weights + 1 

Поэтому я могу назвать my_fun использованием my_fun (my_X) или my_fun (my_X, Веса = my_weights) где my_weights является массивом.

Однако мне нужно включить третий параметр в my_fun, и в идеале я хотел бы передать аргумент как строку. Что-то вроде этого.

import numpy as np 
    def my_fun(X, Weights = None): 
     if Weights is None: 
       np.random.normal(0,1,1) 
     elif Weights == 'My_string': 
       np.random.beta(1,1,1) 
     else: 
       Weights + 1 

Если я пытаюсь вызвать my_fun в my_fun (my_X, вес = 'а'), то я получаю следующее сообщение об ошибке: FutureWarning: поэлементно сравнение не удалось; возвращающий скаляр вместо ...

Любые мысли о том, как изменить форму my_fun?

+1

Ваш код не вызывает эту ошибку. У вас есть рабочий пример? –

+0

@ Радио - вы правы, я просто разместил упрощенную версию моей оригинальной функции, и в этой версии нет ошибки. мне нужно проверить, что вызывает ошибку в моем исходном def – user1571823

+0

https://github.com/numpy/numpy/issues/6784 может пролить свет на предупреждение. – wwii

ответ

0

Прежде всего, я не вижу цели вашего X, вы никогда не используете его в функции. Зачем тогда посылать?

Также вам нужно return в вашей функции. Что вы хотите вернуть? не ясно. Может быть, что-то похожее.

def my_fun(X, Weights = None): 
    if Weights is None: 
      X = np.random.normal(0,1,1) 
    elif Weights == 'My_string': 
      X = np.random.beta(1,1,1) 
    else: 
      Weights + 1 
    return Weights,X 

print(my_fun([1,2,3],Weights = 'My_string')) 
+0

Я попытался упростить мою оригинальную функцию и только показать, что я думал, что она порождает ошибку, которую я получаю. В моей функции я работаю с объектом, поэтому я изменяю объект только с помощью my_fun, поэтому мне не нужно ничего возвращать. Я буду проверять, что вызывает ошибку в моей первоначальной функции, и затем обновит мой вопрос. – user1571823

+0

@ user1571823 будьте осторожны с объявлением переменной 'local',' global'. – Roxanne