本文主要是介绍解决python报错:ValueError: ndarray is not contiguous,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 初探
- 解决方案
- 再探索
- 其他问题
- 获取文件编码
- 感想
本篇博客是主要是为:python 3.x实现特征选择ReliefF算法博友遇到的问题进行解答。
首先要对之前的对部分博友误导性回复说句抱歉。
之前由于自己懒,我自己电脑能跑通就没有去深究真正原因,就简单的以为是数据没有处理好的原因。
当我发现越来越多博友向我反馈这个问题时,我就开始怀疑之前对待这个问题的看法的正确性。
最近一个大哥又向我反馈了这个问题,我终于按捺不住了。我要出手了。
初探
报错:
ret = N.ndarray.new(subtype, shape, arr.dtype,
ValueError: ndarray is not contiguous
问题定位在numpy
,因为我的python3.7跑的通,一位老哥的3.8跑不通,所以以为是python解释器的问题,然后装了python3.8测试发现还是会报一样的问题。
解决方案
这种错误感觉不太好调试,经过一番搜索和测试找到了解决方案。只需要将下方代码简单修改即可:
# 原来代码
f = lambda x: cosSim(np.mat(x), np.mat(aim))
# 修正代码
f = lambda x: cosSim(np.mat(x.values), np.mat(aim.values))
原因:np.mat输入的数据 需要是 类数组的形式。
numpy官方文档地址:https://numpy.org/doc/stable/reference/generated/numpy.mat.html?highlight=mat#numpy.mat
感谢提供方案的地址:https://www.pythonheidong.com/blog/article/469787/fed6384e2c06d169dac8/
再探索
但是为什么我在python3.7跑没有问题?
那肯定是numpy版本的原因了!
经过测试,的确是这样!!!
- 没问题版本:
- 出现问题的版本:
其他问题
可能遇到的其他问题
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb1 in position 0: invalid start byte
很明显编码不正确,尝试换种编码打开,比如常用的utf-8
,gbk
等。
获取文件编码
之前自己做项目有这个需求,就接触到了一个工具包。现在分享给大家。
安装chardet包,当时我封装的获取文件编码的接口如下:
from chardet.universaldetector import UniversalDetectordef get_file_encoding(file):with open(file, mode='rb') as f:detector = UniversalDetector()for line in f:detector.feed(line)if detector.done:breakdetector.close()return detector.result['encoding']
感想
当用一个官方的东西的时候很有必要细读它的官方文档。
这篇关于解决python报错:ValueError: ndarray is not contiguous的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!