Numpy拥有非常强大的广播机制.它甚至可以添加1x2和2x1阵列而不会发出任何警告.我不喜欢这样的行为:99%的概率这样的添加是我的错误的结果,我想要抛出异常.问题:是否有类似的东西:
numpy.safe_add(A,B)
Run Code Online (Sandbox Code Playgroud)
仅当A和B具有完全相同的形状时才有效?
您可以定义一个子类,ndarray用于在计算后检查结果的形状.执行计算,我们检查结果的形状,如果它与操作数的形状不同,则会引发异常:
import numpy as np
class NoBCArray(np.ndarray):
def __new__(cls, input_array, info=None):
obj = np.asarray(input_array).view(cls)
return obj
def __array_wrap__(self, out_arr, context=None):
if self.shape != out_arr.shape:
raise ValueError("Shape different")
return np.ndarray.__array_wrap__(self, out_arr, context)
a = NoBCArray([[1, 2]])
b = NoBCArray([[3], [4]])
a + b # this will raise error
Run Code Online (Sandbox Code Playgroud)
如果要在计算之前检查,则需要换行__add__:
def check_shape(opfunc):
def checkopfunc(self, arr):
if self.shape != arr.shape:
raise ValueError("Shape different before calculation")
else:
return opfunc(self, arr)
return checkopfunc
class NoBCArray(np.ndarray):
__add__ = check_shape(np.ndarray.__add__)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |