【问题标题】:Zip scikit-learn datasets压缩 scikit-learn 数据集
【发布时间】:2015-04-14 12:50:10
【问题描述】:

我正在尝试从 python 3.3 的教程中运行以下代码 sn-p:

>>> import numpy as np
>>> from sklearn import datasets
>>> iris = datasets.load_iris()
>>> np.array(zip(iris.data, iris.target))[0:10]

在 2.7 中,它返回以下输出:

array([[array([ 5.1,  3.5,  1.4,  0.2]), 0],
   [array([ 4.9,  3. ,  1.4,  0.2]), 0],
   [array([ 4.7,  3.2,  1.3,  0.2]), 0],
   [array([ 4.6,  3.1,  1.5,  0.2]), 0],
   [array([ 5. ,  3.6,  1.4,  0.2]), 0],
   [array([ 5.4,  3.9,  1.7,  0.4]), 0],
   [array([ 4.6,  3.4,  1.4,  0.3]), 0],
   [array([ 5. ,  3.4,  1.5,  0.2]), 0],
   [array([ 4.4,  2.9,  1.4,  0.2]), 0],
   [array([ 4.9,  3.1,  1.5,  0.1]), 0]], dtype=object)

但在 3.3 中它返回:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: 0-dimensional arrays can't be indexed

我是 python 新手,我知道 2.x 和 3.x 之间存在差异,我认为这只是与打印功能的差异有关,但我希望能解释一下这里发生的事情和我怎样才能让它在 3.3 中运行。

【问题讨论】:

    标签: python python-3.x scikit-learn


    【解决方案1】:

    这里的问题是 zip 现在返回一个可迭代的而不是一个列表,所以你需要先转换为一个列表:

    In [194]:
    
    np.array(list(zip(iris.data, iris.target)))[0:10]
    Out[194]:
    array([[array([ 5.1,  3.5,  1.4,  0.2]), 0],
           [array([ 4.9,  3. ,  1.4,  0.2]), 0],
           [array([ 4.7,  3.2,  1.3,  0.2]), 0],
           [array([ 4.6,  3.1,  1.5,  0.2]), 0],
           [array([ 5. ,  3.6,  1.4,  0.2]), 0],
           [array([ 5.4,  3.9,  1.7,  0.4]), 0],
           [array([ 4.6,  3.4,  1.4,  0.3]), 0],
           [array([ 5. ,  3.4,  1.5,  0.2]), 0],
           [array([ 4.4,  2.9,  1.4,  0.2]), 0],
           [array([ 4.9,  3.1,  1.5,  0.1]), 0]], dtype=object)
    

    zip 的行为在 python 3 中发生了变化,请注意,当我运行你的代码时,我得到了一个不同的错误:

    --------------------------------------------------------------------------- 
    IndexError                                Traceback (most recent call last) <ipython-input-193-ec320a0afa3a> in <module>()
              2 from sklearn import datasets
              3 iris = datasets.load_iris()
        ----> 4 np.array(zip(iris.data, iris.target))[0:10]
    
    IndexError: too many indices for array
    

    在 python 3 中改变的不仅仅是 print。

    【讨论】:

    • 谢谢。我确实意识到除了印刷品之外还有更多的变化,但我的意思是我对这些变化的有限了解不足以帮助我了解其他哪些变化会影响这个 sn-p。如果您不介意详细说明,为什么您得到的错误与我不同?你用的是哪个版本?
    • 我正在运行 python 3.4 numpy 1.9.1, sklearn 版本 0.15.2,而不是因为在我的代码中创建的是一个数组,其中一个条目是 zip 对象而不是zip 对象的内容
    • 感谢您的澄清
    猜你喜欢
    • 2016-07-13
    • 2012-10-30
    • 2022-06-18
    • 2015-06-22
    • 1970-01-01
    • 2013-07-07
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多