读入np数组无效

2024-04-26 21:04:51 发布

您现在位置:Python中文网/ 问答频道 /正文

希望一切都好…我正在制作一个数据集馈送到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数组中,该数组返回IndexError:数组的索引太多,这对我来说没有意义;因为numpy肯定可以为它的N维数组函数读取2x2数组?任何帮助都将不胜感激!你知道吗


Tags: 数据inimportnumpyfortypenprange
3条回答

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


你在用Python3吗?在Python2中zip()返回一个列表,但在Python3中它返回一个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对它感到满意时,我怎么能有这种旧的行为呢?你知道吗

在Python3中,您必须显式地转换为列表

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]])

然后一切照常进行。你知道吗

因此,可以直接创建所需的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发行版

相关问题 更多 >