Python 创建具有匹配元素的元组数组-mnist数据

Python 创建具有匹配元素的元组数组-mnist数据,python,numpy,Python,Numpy,我有一个csv数据,数据的第一列是“标签”,第一列之后的第784列包含图像(28*28)格式的表示 我正在尝试创建这两个元素的数组。我创建了它,但是我喜欢的格式没有出现 这是我使用的代码: import csv import numpy as np import pandas as pd with open(dir_path+'train0.csv', 'rU') as csv_file: for df in csv.reader(csv_file): label=np

我有一个csv数据,数据的第一列是“标签”,第一列之后的第784列包含图像(28*28)格式的表示

我正在尝试创建这两个元素的数组。我创建了它,但是我喜欢的格式没有出现

这是我使用的代码:

import csv
import numpy as np
import pandas as pd

with open(dir_path+'train0.csv', 'rU') as csv_file:
    for df in csv.reader(csv_file):
        label=np.array(df[0], dtype=float)
        pixels=np.array(df[1:], dtype='float').reshape((28,28))
        print zip((label, pixels))
其结果是:

[(array(0.0),), (array([[   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.]]),)]
但是,我希望的格式是:

请注意,我将标签和像素值从问题切换到了所需的输出。这基本上是一个由两个条目组成的元组数组

这是因为我正在使用csv。我修不好。任何帮助都将不胜感激

这是我最终得到的解决方案:

结果:


ref:stackoverflow.com/search?q=格式化+my+mnist+tuple

,带有示例“csv”文本:

In [41]: txt = b'''label1 1 2 3 4
    ...: label2 8 9 10 11
    ...: label3 10 11 12 13
    ...: '''
和复合数据类型:

In [46]: dt = np.dtype([('label','U10'),('image',float,(2,2))])
genfromtxt
可以将列作为标签和三维图像字段加载:

In [47]: data = np.genfromtxt(txt.splitlines(), dtype=dt)
In [48]: data
Out[48]: 
array([('label1', [[  1.,   2.], [  3.,   4.]]),
       ('label2', [[  8.,   9.], [ 10.,  11.]]),
       ('label3', [[ 10.,  11.], [ 12.,  13.]])],
      dtype=[('label', '<U10'), ('image', '<f8', (2, 2))])
In [49]: data['image']
Out[49]: 
array([[[  1.,   2.],
        [  3.,   4.]],

       [[  8.,   9.],
        [ 10.,  11.]],

       [[ 10.,  11.],
        [ 12.,  13.]]])

这就是解决方案

filename=dir_path+'train1.csv'

    def load(filename):
        # read file into a list of rows
        with open(filename, 'rU') as csvfile:
            lines = csv.reader(csvfile, delimiter=',')
            rows = list(lines)

        # create empty numpy arrays of the required size
        data = np.empty((len(rows), len(rows[0])-1), dtype=np.float64)
        expected = np.empty((len(rows),), dtype=np.int64)

        # fill array with data from the csv-rows
        for i, row in enumerate(rows):
            data[i,:] = row[1:]
            expected[i] = row[0]

        training_data = data, expected
        return training_data

    print load(filename)

您希望从哪里获得第二个数组?如果您有785列,第一列为“标签”,其余列为28x28数组,那么所需格式的标签在哪里?第二个数组来自哪里?csv文件的第一列为label.lxop,请注意,在这种情况下,数组值为“0”。我想要的输出有不同的值。这很有帮助,但它的格式仍然不是我想要的输出格式。我正在寻找这样的内容:看起来你只需要一个包含2个数组的元组。e、 g.
(数据['image'],数据['label'])
In [46]: dt = np.dtype([('label','U10'),('image',float,(2,2))])
In [47]: data = np.genfromtxt(txt.splitlines(), dtype=dt)
In [48]: data
Out[48]: 
array([('label1', [[  1.,   2.], [  3.,   4.]]),
       ('label2', [[  8.,   9.], [ 10.,  11.]]),
       ('label3', [[ 10.,  11.], [ 12.,  13.]])],
      dtype=[('label', '<U10'), ('image', '<f8', (2, 2))])
In [49]: data['image']
Out[49]: 
array([[[  1.,   2.],
        [  3.,   4.]],

       [[  8.,   9.],
        [ 10.,  11.]],

       [[ 10.,  11.],
        [ 12.,  13.]]])
dt = np.dtype([('label','U10'),('image',float,(4,))])
filename=dir_path+'train1.csv'

    def load(filename):
        # read file into a list of rows
        with open(filename, 'rU') as csvfile:
            lines = csv.reader(csvfile, delimiter=',')
            rows = list(lines)

        # create empty numpy arrays of the required size
        data = np.empty((len(rows), len(rows[0])-1), dtype=np.float64)
        expected = np.empty((len(rows),), dtype=np.int64)

        # fill array with data from the csv-rows
        for i, row in enumerate(rows):
            data[i,:] = row[1:]
            expected[i] = row[0]

        training_data = data, expected
        return training_data

    print load(filename)