Python 读取np数组无效

Python 读取np数组无效,python,arrays,numpy,Python,Arrays,Numpy,希望一切顺利…我正在为分类的sklearn算法制作一个数据集提要,但找不到任何简单的数据集,所以我自己制作了一个。 但我有个问题 import numpy as np import random type_1 = [random.randrange(0, 30, 1) for i in range(50)] type_1_label = [1 for i in range(50)] type_2 = [random.randrange(31, 75, 1) for i in range(50

希望一切顺利…我正在为分类的
sklearn
算法制作一个数据集提要,但找不到任何简单的数据集,所以我自己制作了一个。 但我有个问题

import numpy as np
import random

type_1 = [random.randrange(0, 30, 1) for i in range(50)]
type_1_label = [1 for i in range(50)]

type_2 = [random.randrange(31, 75, 1) for i in range(50)]
type_2_label = [-1 for i in range(50)]

zipped_1 = zip(type_1, type_1_label)
zipped_2 = zip(type_2, type_2_label)

ready = np.array(zipped_1)
print(ready[1])

这里的问题是,当我用type-one压缩type-one标签时,正如预期的那样,输出是一个数组,包含两个索引的数组,然后我需要将它输入一个numpy数组,该数组返回indexer:数组的索引太多,这对我来说没有意义;numpy可以读取2x2数组的N维数组函数吗?任何帮助都将不胜感激

您可以直接创建所需的NumPy阵列,结果是:

ready1 = np.random.randint(0, 30, size=(50, 2))
ready1[:, 1] = 1

ready2 = np.random.randint(31, 71, size=(50, 2))
ready2[:, 1] = -1

我不知道您的python版本和其他环境细节,但我猜这就是问题所在。你的代码对我来说很好-

import numpy as np
import random
type_1 = [random.randrange(0, 30, 1) for i in range(50)]
type_1_label = [1 for i in range(50)]
type_2 = [random.randrange(31, 75, 1) for i in range(50)]
type_2_label = [-1 for i in range(50)]
zipped = zip(type_1, type_1_label)
zipped_2 = zip(type_2, type_2_label)
ready = np.array(zipped)
print(ready[1])
输出这个

[14  1]
我有Python2.7anaconda发行版

TL;DR
zip=list(zip(类型1,类型1标签))


您正在使用Python3吗?在Python2
zip()
中返回一个列表,但在Python3中它返回一个zip对象,当您尝试将其放入一个数组时,这会产生很大的不同

这很有趣,我听到你说。。。但是当
zip
返回一个列表并且
numpy
对它感到满意时,我怎么能有这种老习惯呢

使用Python 3时,必须显式转换为列表

In [52]: z1 = list(zip(t1,l1))

In [53]: a = np.array(z1) ; a
Out[53]: 
array([[ 6,  1],
       [18,  1],
       [14,  1],
       [27,  1],
       [14,  1],
       [15,  1],
       [10,  1],
       [18,  1],
       [ 5,  1],
       [ 9,  1]])

然后一切照常进行。

这里可用的问题是什么:?请使用帮助您写出更清楚的问题。目前,你的缩进是一个完全混乱,我们可以使用一个完整的回溯。另外,当我运行这段代码时(在修复缩进之后),我没有收到任何错误。尝试探索awesome数据集存储库:并且您还可以在上创建一个帐户。正如@EdChum所说,您已经有许多嵌入scikit learn的示例,请不要犹豫,仔细查看它们。您是否可能因为使用Python 3而使用
print(ready[1])
是的,我是!在完全重新安装mac osx后,由于其他原因,现在尝试切换哈哈,转换很困难Tim将开始这样做,这很容易,谢谢你的评论给了我新的见解,但这是一个很好的解释,并且使我从2.7版过渡到3版更容易,很荣幸你我不明白的是,[None][0]的附加轴的作用是什么?当然,数据应该在[1:50]中?即使它返回的是对象而不是ech数据点,我也应该能够在ready[0]中使用for t访问它:print t t right?@entercaspa对您的合法好奇的良好回答将超过注释的长度-简而言之,附加轴允许您有一个轴进行索引(注意,您只能通过索引来访问数组内容)事实上,创建一个包含单个对象而不是一系列对象的数据阵列并不会创建用于索引内容的轴。这与你的期望不同,不是吗?但事实是。。。你是最后一点,我不明白你的意思。。。我会说,这取决于你如何实例化
就绪
,但我知道这不是一个令人满意的回答。是的,我现在在3.5或什么的,在2.7打印它是好的哈哈
In [50]: a[None][0]
Out[50]: <zip at 0x7f3b88044688>

In [51]: for t in a[None][0]: print (t)
(6, 1)
(18, 1)
(14, 1)
(27, 1)
(14, 1)
(15, 1)
(10, 1)
(18, 1)
(5, 1)
(9, 1)
In [52]: z1 = list(zip(t1,l1))

In [53]: a = np.array(z1) ; a
Out[53]: 
array([[ 6,  1],
       [18,  1],
       [14,  1],
       [27,  1],
       [14,  1],
       [15,  1],
       [10,  1],
       [18,  1],
       [ 5,  1],
       [ 9,  1]])