我使用python 3.6想要分割数组,但我发现我加载的array它没有第二个维度。
我用:
path1 = 'table1.csv'
data1 = np.loadtxt(path1, dtype=[('id', int),('VAR1', int),('VAR2', int),('VAR3', float),('OUTCOME', int)], delimiter=',', skiprows=1)
当我尝试拆分它,或者我想得到我加载的形状时,我错了:
>>> data1.shape
(24999,)
因为它没有第二维,所以我不能使用
>>>numpy.split(data1, (4,), axis=1)
我只想将矢量分割为第4列,但是x维度是空的,我不能这样做。如何使数组的形状像:
(24999, 5)
如何获取第二个维度并拆分数组? 我希望分割数据并返回
x,y=np.split(data, (4,), axis=1)
x是x1,x2 x3 ...带参数,y是结果,然后我可以从x学习模型。
答案 0 :(得分:1)
正如评论中所述,使用dtype
您有'行'和'字段',但不是列。字段按名称访问,而不是数字。并且split
不适用于各个字段。
您可以使用data1['OUTCOME']
访问第5个字段。您可以访问一组带有名称列表的列,例如。 data1[['VAR1','VAR2','VAR3']].copy()
。 copy
并不总是需要,但我已准备好使用它。
或者,使用usecols
分两步加载文件以选择不同的列。相应地调整dtype
。
或者使用dtype=float
加载,并获得一个(n,5)
浮点数组。然后你可以进行列拆分。
答案 1 :(得分:0)
实际上,您似乎希望将矢量设置为行向量,因为您设置了axis=1
(这意味着您要将其拆分为第4列)。为什么不添加第二个维度?你可能想要做
>>> data1 = data1.reshape((1,data1.shape[0]))
>>> numpy.split(data1, (4,), axis=1)
或者,另一种解决方案是,不设置axis
参数
>>> data1 = np.loadtxt(path1, dtype=[('id', int),('VAR1', int),('VAR2', int),('VAR3', float),('OUTCOME', int)], delimiter=',', skiprows=1)
>>> numpy.split(data1, (4,))
或者尝试不指定dtype。您将能够在第二个处理阶段将您的ID转换为整数。
>>> data1 = np.loadtxt(path1, delimiter=',', skiprows=1)