在numpy Matrix中输入文件

时间:2016-09-09 14:16:57

标签: python numpy

我无法找到在numpy矩阵中输入给定文件的方法。 我尝试了np.loadtxt(),但无法获取数据。

我的文件格式是这样的: col = 9的数量(除了第一个字段,所有其他字段都在浮点数)。

M,0.475,0.37,0.125,0.5095,0.2165,0.1125,0.165,9
F,0.55,0.44,0.15,0.8945,0.3145,0.151,0.32,19

我还尝试在列表中输入输入,然后尝试使其成为numpy矩阵,但这也是一个失败。

2 个答案:

答案 0 :(得分:1)

您可能需要考虑使用pandas - 它更适合于同类数据,其read_csv函数将获取您的数据文件并立即将其转换为您可以使用的内容。

您可以为每个列命名 - 如果您不这样做,该函数会将第一个数据行解释为列标题。

>>> import pandas as pd
>>> data = pd.read_csv("/tmp/data.txt",
                 names=['sex', 'one', 'two', 'three', 'four',
                        'five', 'six', 'seven', 'eight'])
>>> print(data)
  sex    one   two  three    four    five     six  seven  eight
0   M  0.475  0.37  0.125  0.5095  0.2165  0.1125  0.165      9
1   F  0.550  0.44  0.150  0.8945  0.3145  0.1510  0.320     19

答案 1 :(得分:1)

将您的样本作为行列表:

animation-duration

In [1]: txt=b""" ...: M,0.475,0.37,0.125,0.5095,0.2165,0.1125,0.165,9 ...: F,0.55,0.44,0.15,0.8945,0.3145,0.151,0.32,19 ...: """ In [2]: txt=txt.splitlines() 可以使用genfromtxt

加载它
dtype=None

结果是一个1d数组(这里是2个元素),有许多字段,可以通过名称访问。这里第一个被推断为一个字符串,其余的是浮点数,除了最后一个整数。

我可以更具体地了解In [16]: data = np.genfromtxt(txt, delimiter=',', dtype=None) In [17]: data Out[17]: array([(b'M', 0.475, 0.37, 0.125, 0.5095, 0.2165, 0.1125, 0.165, 9), (b'F', 0.55, 0.44, 0.15, 0.8945, 0.3145, 0.151, 0.32, 19)], dtype=[('f0', 'S1'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8'), ('f4', '<f8'), ('f5', '<f8'), ('f6', '<f8'), ('f7', '<f8'), ('f8', '<i4')]) In [18]: data['f0'] Out[18]: array([b'M', b'F'], dtype='|S1') In [19]: data['f3'] Out[19]: array([ 0.125, 0.15 ]) In [20]: ,并定义一个包含多列的字段

dtype

In [21]: data=np.genfromtxt(txt,delimiter=',',dtype=['S3','8float']) In [22]: data Out[22]: array([(b'M', [0.475, 0.37, 0.125, 0.5095, 0.2165, 0.1125, 0.165, 9.0]), (b'F', [0.55, 0.44, 0.15, 0.8945, 0.3145, 0.151, 0.32, 19.0])], dtype=[('f0', 'S3'), ('f1', '<f8', (8,))]) In [23]: data['f1'] Out[23]: array([[ 0.475 , 0.37 , 0.125 , 0.5095, 0.2165, 0.1125, 0.165 , 9. ], [ 0.55 , 0.44 , 0.15 , 0.8945, 0.3145, 0.151 , 0.32 , 19. ]]) 字段是形状为2d的数组(2,8)。

f1也可以使用,但它的np.loadtxt解释并不灵活。从dtype示例中复制dtype会产生相同的结果。

genfromtxt

datal=np.loadtxt(txt,delimiter=',',dtype=data.dtype) 也有一个好的csv阅读器,具有更快的速度和灵活性。如果您已经在使用熊猫,那么这是一个不错的选择。