问题描述:
skimage 报错
from skimage import io
报错信息如下:
cannot import name '_validate_lengths' from 'numpy.lib.arraypad'
原因分析:
numpy的版本问题,导致_validate_lengths()
函数被删除。
解决方案:
方案1(不推荐):
numpy降级。
降到一个保留有_validate_lengths()
函数的版本。具体哪个版本并不清楚。
方案2(推荐):
其实skimage中给出了解决方案。
在skimage中保留了缺少的_validate_lengths
函数,将其复制到numpy的对应位置即可!
方案2的好处:对任意numpy版本均可用,而不用把numpy限制在一个低版本。
解决步骤:
仅进行方案2。
-
找到
arraycrop.py
文件。文件位置(Linux):
/home/hgx/lib/python3.7/site-packages/skimage/util/arraycrop.py
-
复制其中被注释掉的函数
_normalize_shape()
。_validate_lengths()
。这就是numpy缺少的函数!
-
打开
arraypad.py
文件文件位置(Linux):
/home/hgx/lib/python3.7/site-packages/numpy/lib/arraypad.py
-
在最后加入在
arraycrop.py
复制的两个函数,并取消注释,保存。 -
重启
可能遇到的报错
IndentationError: unindent does not match any outer indentation level
解决方式见:[bug解决] IndentationError unindent does not match any outer indentation level
参考:完美解决cannot import name ‘_validate_lengths’ from 'numpy.lib.arraypad’错误