2013-07-14 7 views
0

Я пытаюсь вычесть два нумерованных массива numpy a и b. Я бы хотел, чтобы a-b возвращал ошибку, когда они не имеют одинаковый размер. Например, если форма (a) = [300,] и форма (b) = [450,]; a-b возвращает массив формы [300,450]. Вместо этого я хотел бы, чтобы программа возвращала ошибку.вычитание питона нулевых ранговых массивов

+2

«a-b возвращает массив формы [300,450]« Нет, это не так. Получали ли вы формы a и b неправильно? – user2357112

+2

Вы уверены, что даже говорите о массивах нулевого ранга? Массив нулевого ранга 'a' имеет' a.shape ==() '. – user2357112

ответ

1

Вы можете попробовать этот подход:

def mySubtract(a, b): 
    if a is None or b is None or a.shape != b.shape: 
     sys.stderr.write("a and b don't have the same shape!\n") 
     raise ValueError("a and b don't have same shape!") 
    return a-b 

Я не был уверен, что вы имели в виду «возвращает ошибку», но если вы предпочитаете просто возвращать неверный результат, а не поднимать исключение ValueError, вместо этого вы можете просто return None или return "a and b don't have the same shape!".

Имейте в виду, что вызывающий абонент вашей программы должен знать, что делать с этими специальными кодами возврата ошибки. Таким образом, в целом исключение может быть более чистым.

+0

+1 для рекомендации исключений по кодам возврата – PaulMcG

+0

Нет необходимости в проверках 'None'. Те, которые должны обрабатываться только с помощью 'TypeError', вы получите, если попытаетесь сделать математику с' None'. – user2357112

0

Возможно, вы захотите изучить исключения. Вот некоторые псевдокод, который укажет вам на правильном пути:

if a.size() != b.size(): 
    raise Exception("Invalid sizes") 
+2

Я не думаю, что объект numpy.array содержит метод size(), но имеет атрибут размера. Вы можете использовать a.size вместо a.size(), но я думаю, что OP искал a.shape, а не a.size – linguanerd