读入np数组不起作用

时间:2016-05-20 07:55:44

标签: 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)]
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])

这里的问题是,当我输入一个类型为1的标签时,输出是一个数组,带有两个索引的数组,正如预期的那样,然后我需要将它提供给一个返回IndexError的numpy数组:阵列的许多索引对我来说没有意义;肯定numpy可以为其N维数组函数读取2x2数组?任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

您可以直接创建所需的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

答案 1 :(得分:0)

我不知道你的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]

我有Python 2.7 Anaconda发行版

答案 2 :(得分:0)

TL; DR            zipped = list(zip(type_1, type_1_label))                      

您使用的是Python 3吗?在Python 2 zip()中返回一个列表但在Python 3中它返回一个 zip对象,当你尝试将它放入 ndarray 时,这会有所不同...

In [45]: l1 = [1 for i in range(10)]

In [46]: t1 = [randrange(30) for i in range(10)]

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

In [48]: z1
Out[48]: <zip at 0x7f3b88044688>

In [49]: a = np.array(z1) ; a
Out[49]: array(<zip object at 0x7f3b88044688>, dtype=object)

如您所见,a的内容是单个对象, 没有维度

你可以做些什么来访问内部对象?您可以添加其他轴,然后照常索引

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)

这很有趣,我听到你说...但是当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]])

然后一切正常。