cannot import name '_validate_lengths' from 'numpy.lib.arraypad'

在Anaconda下新配置了tensorflow环境,结果在引入skimage 包时报错,错误提示from numpy.lib.arraypad import _validate_lengths,找不到_validate_lengths函数,在arraypad.py文件中确实找不到对应的函数,所以找到以前配置过的环境中对应的文件,拷贝这个缺失的函数,问题解决(****************一定要重启环境(重启pycharm))。

找到:Anaconda3/envs/your dir/lib/python3.7/site-packages/numpy/lib/arraypad.py 954行,添加洗下面两个函数保存,重新加载即可消除错误(****************一定要重启环境(pycharm))


def _normalize_shape(ndarray, shape, cast_to_int=True):
“”"
Private function which does some checks and normalizes the possibly
much simpler representations of ‘pad_width’, ‘stat_length’,
‘constant_values’, ‘end_values’.

Parameters
----------
narray : ndarray
    Input ndarray
shape : {sequence, array_like, float, int}, optional
    The width of padding (pad_width), the number of elements on the
    edge of the narray used for statistics (stat_length), the constant
    value(s) to use when filling padded regions (constant_values), or the
    endpoint target(s) for linear ramps (end_values).
    ((before_1, after_1), ... (before_N, after_N)) unique number of
    elements for each axis where `N` is rank of `narray`.
    ((before, after),) yields same before and after constants for each
    axis.
    (constant,) or val is a shortcut for before = after = constant for
    all axes.
cast_to_int : bool, optional
    Controls if values in ``shape`` will be rounded and cast to int
    before being returned.

Returns
-------
normalized_shape : tuple of tuples
    val                               => ((val, val), (val, val), ...)
    [[val1, val2], [val3, val4], ...] => ((val1, val2), (val3, val4), ...)
    ((val1, val2), (val3, val4), ...) => no change
    [[val1, val2], ]                  => ((val1, val2), (val1, val2), ...)
    ((val1, val2), )                  => ((val1, val2), (val1, val2), ...)
    [[val ,     ], ]                  => ((val, val), (val, val), ...)
    ((val ,     ), )                  => ((val, val), (val, val), ...)

"""
ndims = ndarray.ndim

# Shortcut shape=None
if shape is None:
    return ((None, None), ) * ndims

# Convert any input `info` to a NumPy array
shape_arr = np.asarray(shape)

try:
    shape_arr = np.broadcast_to(shape_arr, (ndims, 2))
except ValueError:
    fmt = "Unable to create correctly shaped tuple from %s"
    raise ValueError(fmt % (shape,))

# Cast if necessary
if cast_to_int is True:
    shape_arr = np.round(shape_arr).astype(int)

# Convert list of lists to tuple of tuples
return tuple(tuple(axis) for axis in shape_arr.tolist())

def _validate_lengths(narray, number_elements):
“”"
Private function which does some checks and reformats pad_width and
stat_length using _normalize_shape.

Parameters
----------
narray : ndarray
    Input ndarray
number_elements : {sequence, int}, optional
    The width of padding (pad_width) or the number of elements on the edge
    of the narray used for statistics (stat_length).
    ((before_1, after_1), ... (before_N, after_N)) unique number of
    elements for each axis.
    ((before, after),) yields same before and after constants for each
    axis.
    (constant,) or int is a shortcut for before = after = constant for all
    axes.

Returns
-------
_validate_lengths : tuple of tuples
    int                               => ((int, int), (int, int), ...)
    [[int1, int2], [int3, int4], ...] => ((int1, int2), (int3, int4), ...)
    ((int1, int2), (int3, int4), ...) => no change
    [[int1, int2], ]                  => ((int1, int2), (int1, int2), ...)
    ((int1, int2), )                  => ((int1, int2), (int1, int2), ...)
    [[int ,     ], ]                  => ((int, int), (int, int), ...)
    ((int ,     ), )                  => ((int, int), (int, int), ...)

"""
normshp = _normalize_shape(narray, number_elements)
for i in normshp:
    chk = [1 if x is None else x for x in i]
    chk = [1 if x >= 0 else -1 for x in chk]
    if (chk[0] < 0) or (chk[1] < 0):
        fmt = "%s cannot contain negative values."
        raise ValueError(fmt % (number_elements,))
return normshp
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值