core.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:deliver 作者: orchestor 项目源码 文件源码
def __array_wrap__(self, obj, context=None):
        """
        Special hook for ufuncs.

        Wraps the numpy array and sets the mask according to context.

        """
        result = obj.view(type(self))
        result._update_from(self)

        if context is not None:
            result._mask = result._mask.copy()
            (func, args, _) = context
            m = reduce(mask_or, [getmaskarray(arg) for arg in args])
            # Get the domain mask
            domain = ufunc_domain.get(func, None)
            if domain is not None:
                # Take the domain, and make sure it's a ndarray
                if len(args) > 2:
                    with np.errstate(divide='ignore', invalid='ignore'):
                        d = filled(reduce(domain, args), True)
                else:
                    with np.errstate(divide='ignore', invalid='ignore'):
                        d = filled(domain(*args), True)

                if d.any():
                    # Fill the result where the domain is wrong
                    try:
                        # Binary domain: take the last value
                        fill_value = ufunc_fills[func][-1]
                    except TypeError:
                        # Unary domain: just use this one
                        fill_value = ufunc_fills[func]
                    except KeyError:
                        # Domain not recognized, use fill_value instead
                        fill_value = self.fill_value
                    result = result.copy()
                    np.copyto(result, fill_value, where=d)

                    # Update the mask
                    if m is nomask:
                        m = d
                    else:
                        # Don't modify inplace, we risk back-propagation
                        m = (m | d)

            # Make sure the mask has the proper size
            if result.shape == () and m:
                return masked
            else:
                result._mask = m
                result._sharedmask = False

        return result
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号