# *-* coding: utf-8 *-*
import numpy as np
import scipy as sc
A = np.array([[1,1], [1,2], [3,1]])
B = np.array([[2,3], [3,2], [1,4]])
print (A==B).all()
print np.array_equal(A, B)
print np.array_equiv(A, B)
print np.allclose(A, B)
但他们只是说“假”,但我仍然可以添加这两个数组。我必须检查是否允许加法/乘法(维数?)如果没有,我必须给出一个错误。
发布于 2015-09-03 04:05:02
import numpy as np
A = np.array([[1, 1], [1, 2], [3, 1]])
B = np.array([[2, 3], [3, 2], [1, 4]])
C = np.array([[1, 2], [3, 4]])
# same shapes --> operations are not a problem
print(A+B)
print(A*B)
# shapes differ --> numpy raises ValueError
print(A+C)
print(A*C)
numpy引发的ValueError如下所示:
ValueError:操作数不能与形状一起广播(3,2) (2,2)
如您所见,在执行任何数组操作之前,numpy
都会检查这些形状。
但是,如果您希望手动执行此操作或希望捕获numpy
引发的异常,则可以执行以下操作:
# prevent numpy raising an ValueError by prooving array's shapes manually before desired operation
def multiply(arr1, arr2):
if arr1.shape == arr2.shape:
return arr1 * arr2
else:
print('Shapes are not equal. Operation cannot be done.')
print(multiply(A, B))
print(multiply(A, C))
# prevent numpy raising an ValueError by prooving array's shapes manually before desired operation
def add(arr1, arr2):
if arr1.shape == arr2.shape:
return arr1 + arr2
else:
print('Shapes are not equal. Operation cannot be done.')
print(add(A, B))
print(add(A, C))
# catch the error / exception raised by numpy and handle it like you want to
try:
result = A * C
except Exception as e:
print('Numpy raised an Exception (ValueError) which was caught by try except.')
else:
print(result)
发布于 2015-09-03 06:30:20
要检查形状是否匹配以进行添加,诀窍将是处理广播,因为广播允许添加形状不等的数组。要检查这一点,可以使用np.broadcast
。
下面是一个例子:
a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.array([1, 2, 3])
a + b # raises value error
np.broadcast(a, b) # raise value error
a + b[:,None] # does the addition with broadcasting
np.broadcast(a, b[:,None]) # returns a valid broadcast object
如果a
和b
具有相同的形状,并且可以直接添加,np.broadcast
也将返回一个有效的对象,而不会引发异常。
https://stackoverflow.com/questions/32374945
复制相似问题