Python 创建具有匹配元素的元组数组-mnist数据
我有一个csv数据,数据的第一列是“标签”,第一列之后的第784列包含图像(28*28)格式的表示 我正在尝试创建这两个元素的数组。我创建了它,但是我喜欢的格式没有出现 这是我使用的代码: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
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)