转换numpy数组奇怪的问题

时间:2017-12-03 19:21:50

标签: python pandas numpy svm

我有以下数据

3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 41 146 146 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 129 253 253 253 250 163 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 133 253 253 253 253 253 253 229 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 253 252 145 102 107 237 253 247 128 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 181 253 167 0 0 0 61 235 253 253 163 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 253 43 0 0 0 0 58 193 253 253 164 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 187 253 32 0 0 0 0 0 55 236 253 253 86 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 146 253 32 0 100 190 87 87 87 147 253 253 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 253 78 40 248 253 253 253 253 253 253 253 223 84 15 0 0 0 0 0 0 0 0 0 0 0 0 0 14 92 12 35 240 253 253 253 253 253 253 253 253 253 244 89 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 161 179 253 253 253 253 253 253 253 253 253 209 43 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 16 16 39 38 16 16 145 243 253 253 185 48 0 0 0 0 0 0 0 0 0 0 0 0 0 20 58 0 0 0 0 0 0 0 0 58 209 253 253 183 0 0 0 0 0 0 0 0 0 0 0 0 77 221 247 79 0 0 0 0 0 0 0 0 13 219 253 240 72 0 0 0 0 0 0 0 0 0 0 0 90 247 253 252 57 0 0 0 0 0 0 0 0 53 251 253 191 0 0 0 0 0 0 0 0 0 0 0 0 116 253 253 59 0 0 0 0 0 0 0 0 99 252 253 145 0 0 0 0 0 0 0 0 0 0 0 0 14 188 253 221 158 38 0 0 0 0 111 211 246 253 253 145 0 0 0 0 0 0 0 0 0 0 0 0 0 12 221 246 253 251 249 249 249 249 253 253 253 253 200 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 183 228 253 253 253 253 253 253 195 124 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 37 138 74 126 88 37 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

第1列是图像的标签,其他是像素。也就是说,有785列,其中第一列是标签,其他784是28 * 28像素图像。我试图获取数据是以下格式

for column 1:array([ 3.,....])) and for column 2-784: (array([[ 0.....0]]),即类型<type 'numpy.ndarray'>, <type 'numpy.ndarray'>

我使用以下方法读取数据

data='~/train.csv'
dataset = genfromtxt(dataset, delimiter=",", dtype=np.dtype('>i4'))[1:]

def gen_lin_separable_overlap_data():
        labels = [x[0] for x in dataset]
        data = [x[1:]/float(x.max()) for x in dataset] # with scaling

        return labels, data

我尝试使用以下步骤将数据转换为所需的形状:

labels, data =gen_lin_separable_overlap_data() #reads the data
labels=np.array(labels)
data=np.array(data) #or np.array([data])

输出:

`labels.shape #(40,) 
for np.array([data]), data.shape #(1, 40, 784)
for data=np.array(data), data.shape(40,784)` 

它产生的输出为:

[3 ..., 3 3 ] [[0......0]]

我所缺少的是上面的格式。对此问题的任何帮助表示高度赞赏。

1 个答案:

答案 0 :(得分:0)

Numpy具有将文本文件读入数组的函数loadtxt(),我认为这更容易用于您的目的。

import numpy as np
imgs = np.loadtxt('train.csv', delimiter=',', dtype=np.uint8)[:, 1:].reshape(-1, 28, 28)
print(imgs.shape)
  

(3,28,28)

此处文件train.csv在我的情况下包含三行,因此有三个图像。请注意,重塑功能为每个图像创建一个新轴(因此imgs[0]是第一个图像,依此类推,len(imgs)是图像数量),每个图像的大小(28,28) )。