我是python的新手,我尝试执行一个简单的任务,即读取.csv文件并将其保存在特定的数据结构中。我使用numpy来加载数据,我得到了ndarray
ndarray
,这不是我想要的。
我的代码:
import numpy
filename = '../HTRU2/HTRU_2.csv'
raw_data = open(filename, 'rU')
data = numpy.loadtxt(raw_data, delimiter=',')
我正在寻找的数据结构是list
tuples
。 tuples
是ndarray
s的一对(x,y): x 是ndarray
的形状( nx - 1 ,1)填充float
s,其中 nx 是文件中每行的元素数减去1; y是形状(1,1)的ndarray
,它包含该行的最后一个元素(也是float
)。
你可能认为这是我已经编造的一些疯狂的数据结构,但它实际上非常有用,因为我的最终目标是把它放在一个神经网络中(如果你知道NN'你可能猜到元组实际上是一对输入/输出,两者都是列矩阵)。我不能改变数据结构。
档案样本:
140.5625,55.68378214,-0.234571412,-0.699648398,3.199832776,19.11042633,7.975531794,74.24222492,0
102.5078125,58.88243001,0.465318154,-0.515087909,1.677257525,14.86014572,10.57648674,127.3935796,0
每个元组都是这样的:
# x y
[[140.5625]
[55.68378214]
[-0.234571412]
[-0.699648398]
[3.199832776]
[19.11042633]
[7.975531794]
[74.24222492]] , [[0]]
答案 0 :(得分:1)
In [60]: data = np.arange(12).reshape(3,4)
In [61]: data
Out[61]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [62]: data.tolist()
Out[62]: [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
In [63]: [tuple(l) for l in _]
Out[63]: [(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, 10, 11)]
In [64]: [tuple(np.array(i) for i in l) for l in __]
Out[64]:
[(array(0), array(1), array(2), array(3)),
(array(4), array(5), array(6), array(7)),
(array(8), array(9), array(10), array(11))]
In [65]: [tuple(np.array(i) for i in l) for l in data]
Out[65]:
[(array(0), array(1), array(2), array(3)),
(array(4), array(5), array(6), array(7)),
(array(8), array(9), array(10), array(11))]
但你真的需要一个元组层吗?为什么不添加维度:
In [67]: data.reshape(3,4,1)
Out[67]:
array([[[ 0],
[ 1],
[ 2],
[ 3]],
[[ 4],
[ 5],
[ 6],
[ 7]],
[[ 8],
[ 9],
[10],
[11]]])
答案 1 :(得分:0)
import pandas as pd
filename = '../HTRU2/HTRU_2.csv'
df = pd.read_csv(filename, encoding="utf-8")
第二个参数可能是不必要的
最后:
df = [tuple(x) for x in df.values]
答案 2 :(得分:0)
我能够找到解决方案:
import numpy
filename = '../HTRU2/test.csv'
file = open(filename, 'rU')
data = numpy.loadtxt(file, delimiter=',')
training_data = list()
for test in data:
training_data.append((test[:-1].reshape(8, 1), test[-1].reshape(1, 1)))
输入神经元的数量为8,输出神经元的数量为1。