Я пытаюсь вычесть два нумерованных массива numpy a и b. Я бы хотел, чтобы a-b возвращал ошибку, когда они не имеют одинаковый размер. Например, если форма (a) = [300,] и форма (b) = [450,]; a-b возвращает массив формы [300,450]. Вместо этого я хотел бы, чтобы программа возвращала ошибку.вычитание питона нулевых ранговых массивов
ответ
Вы можете попробовать этот подход:
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!"
.
Имейте в виду, что вызывающий абонент вашей программы должен знать, что делать с этими специальными кодами возврата ошибки. Таким образом, в целом исключение может быть более чистым.
+1 для рекомендации исключений по кодам возврата – PaulMcG
Нет необходимости в проверках 'None'. Те, которые должны обрабатываться только с помощью 'TypeError', вы получите, если попытаетесь сделать математику с' None'. – user2357112
Возможно, вы захотите изучить исключения. Вот некоторые псевдокод, который укажет вам на правильном пути:
if a.size() != b.size():
raise Exception("Invalid sizes")
Я не думаю, что объект numpy.array содержит метод size(), но имеет атрибут размера. Вы можете использовать a.size вместо a.size(), но я думаю, что OP искал a.shape, а не a.size – linguanerd
«a-b возвращает массив формы [300,450]« Нет, это не так. Получали ли вы формы a и b неправильно? – user2357112
Вы уверены, что даже говорите о массивах нулевого ранга? Массив нулевого ранга 'a' имеет' a.shape ==() '. – user2357112