希望一切顺利......我正在将数据集输入到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数组?任何帮助将不胜感激!
答案 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]])
然后一切正常。