[英]Limits on Python Lists?
我正在尝试将大量信息同化为可用数组,如下所示:
for (dirpath, dirnames, filenames) in walk('E:/Machin Lerning/Econ/full_set'):
ndata.extend(filenames)
for i in ndata:
currfile = open('E:/Machin Lerning/Econ/full_set/' + str(i),'r')
rawdata.append(currfile.read().splitlines())
currfile.close()
rawdata = numpy.array(rawdata)
for order,file in enumerate(rawdata[:10]):
for i in rawdata[order]:
r = i.split(',')
pdata.append(r)
fdata.append(pdata)
pdata = []
fdata = numpy.array(fdata)
plt.figure(1)
plt.plot(fdata[:,1,3])
编辑:使用前10个txt文件打印ftada.shape之后
for order,file in enumerate(rawdata[:10]):
我看到是(10,500,7)。 但是,如果我不限制它的大小,而是说
for order,file in enumerate(rawdata):
然后fdata.shape就是(447,)似乎每当我将在rawdata数组中浏览的元素数量增加到13以上时,就会发生这种情况……这也没有特定的位置-我将其更改为
for order,file in enumerate(rawdata[11:24):
而且效果很好。 aaaaahhh如果有用的话:以下是文本文件的示例:
20080225,A,31.42,31.79,31.2,31.5,30575
20080225,AA,36.64,38.95,36.48,38.85,225008
20080225,AAPL,118.59,120.17,116.664,119.74,448847
看起来fdata
是一个数组,错误在fdata[:,1,3]
。 尝试使用3个索引(切片,1和3)对fdata
进行索引。但是,如果fdata
是2d数组,则会产生此错误- too many indices
。
当您遇到“索引”错误时,请找出有问题的数组的shape
。 不要只是猜测。 添加调试语句print(fdata.shape)
。
===================
以您的文件样本作为行列表:
In [822]: txt=b"""20080225,A,31.42,31.79,31.2,31.5,30575
...: 20080225,AA,36.64,38.95,36.48,38.85,225008
...: 20080225,AAPL,118.59,120.17,116.664,119.74,448847 """
In [823]: txt=txt.splitlines()
In [826]: fdata=[]
In [827]: pdata=[]
读取一个“文件”:
In [828]: for i in txt:
...: r=i.split(b',')
...: pdata.append(r)
...: fdata.append(pdata)
...:
...:
In [829]: fdata
Out[829]:
[[[b'20080225', b'A', b'31.42', b'31.79', b'31.2', b'31.5', b'30575 '],
....]]]
In [830]: np.array(fdata)
Out[830]:
array([[[b'20080225', b'A', b'31.42', b'31.79', b'31.2', b'31.5',
b'30575 '],
...]]],
dtype='|S8')
In [831]: _.shape
Out[831]: (1, 3, 7)
读取“相同文件”
In [832]: for i in txt:
...: r=i.split(b',')
...: pdata.append(r)
...: fdata.append(pdata)
In [833]: len(fdata)
Out[833]: 2
In [834]: np.array(fdata).shape
Out[834]: (2, 6, 7)
In [835]: np.array(fdata).dtype
Out[835]: dtype('S8')
注意dtype-8个字符的字符串。 由于每行按值是一个字符串,因此无法将整个内容转换为数字。
现在读取略有不同的“文件”(少一行,少一个值)
In [836]: txt1=b"""20080225,A,31.42,31.79,31.2,31.5,30575
...: 20080225,AA,36.64,38.95,36.48,38.85 """
In [837]: txt1=txt1.splitlines()
In [838]: for i in txt1:
...: r=i.split(b',')
...: pdata.append(r)
...: fdata.append(pdata)
In [839]: len(fdata)
Out[839]: 3
In [840]: np.array(fdata).shape
Out[840]: (3, 8)
In [841]: np.array(fdata).dtype
Out[841]: dtype('O')
现在让我们添加一个“空”文件-没有行,因此pdata
为[]
In [842]: fdata.append([])
In [843]: np.array(fdata).shape
Out[843]: (4,)
In [844]: np.array(fdata).dtype
Out[844]: dtype('O')
数组的形状和dtype已完全改变。 它无法再从线条创建统一的3d阵列。
10个文件之后的形状(10、500、7)表示10个文件,每个500行,每行7列。 但是全部400个文件中的一个或多个是不同的。 我的最后一次迭代建议一个是空的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.