Python列表的限制?
我试图将一组信息吸收到一个可用数组中,如下所示:Python列表的限制?,python,list,numpy,Python,List,Numpy,我试图将一组信息吸收到一个可用数组中,如下所示: 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(
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]):
我看是(10500,7)。但是如果我不限制这个的大小,而是说
for order,file in enumerate(rawdata):
那么fdata.shape就是(447,)
似乎每当我将在rawdata数组中查看的元素数增加到13个以上时,就会发生这种情况。。。它也不是任何特定的位置-我把它改为
for order,file in enumerate(rawdata[11:24):
这很有效。aaaaahh
如果有用:下面是文本文件的示例:
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]
中。它尝试使用切片、1和3这三个索引索引fdata
。但如果fdata
是2d数组,则会产生此错误-索引过多
当出现“索引”错误时,请找出有问题数组的形状。不要只是猜测。添加调试语句打印(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)
读取“相同的文件”
注意数据类型-一个8个字符的字符串。因为每行的on值是一个字符串,所以它不能将整个内容转换为数字
现在读一个稍微不同的“文件”(少一行,少一个值)
现在让我们添加一个“空”文件-没有行,因此pdata
是[]
In [842]: fdata.append([])
In [843]: np.array(fdata).shape
Out[843]: (4,)
In [844]: np.array(fdata).dtype
Out[844]: dtype('O')
阵列形状和数据类型已完全更改。它无法再从线条创建统一的三维阵列
10个文件(10500,7)后的形状表示10个文件,每行500行,每行7列。但完整的400个文件中有一个或多个是不同的。我上一次迭代表明其中一个是空的。看起来像是fdata
是一个数组,错误在fdata[:,1,3]
。尝试使用切片、1和3这三个索引对fdata
进行索引。但如果fdata
是二维数组,则会产生此错误-索引过多
当出现“索引”错误时,请找出有问题数组的形状
。不要只是猜测。添加调试语句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)
读取“相同的文件”
请注意数据类型-一个由8个字符组成的字符串。因为每行的on值是一个字符串,所以它不能将整个内容转换为数字
现在读一个稍微不同的“文件”(少一行,少一个值)
现在让我们添加一个“空”文件-没有行,因此pdata
是[]
In [842]: fdata.append([])
In [843]: np.array(fdata).shape
Out[843]: (4,)
In [844]: np.array(fdata).dtype
Out[844]: dtype('O')
数组形状和数据类型已完全更改。它无法再从直线创建统一的三维阵列
10个文件后的形状(10500,7)表示10个文件,每行500行,每行7列。但完整的400个文件中的一个或多个是不同的。我的上一次迭代表明其中一个是空的。该错误通常意味着您试图将二维数组视为三维数组。它与数组中的元素数无关。我怀疑您的问题与您如何编写最后一行有关,而不是与代码中的任何其他内容有关。您的代码和异常不匹配(代码中没有print
或len
)。它看起来不像你在执行你认为你是的代码。也许Anaconda存在缓存问题。该错误通常意味着您试图将二维数组视为三维数组。它与数组中的元素数无关。我怀疑您的问题与您如何编写最后一行有关,而不是与代码中的任何其他内容有关。您的代码和异常不匹配(代码中没有print
或len
)。它看起来不像你在执行你认为你是的代码。也许Anaconda存在缓存问题。数组的形状似乎随大小而变化?我不明白!还要检查数据类型。你的一个或多个文件有不同的布局。重要的不是总数;这是文件内容。看到我的模拟文件读取。感谢您的解释!但问题是。指定rawdata[0:26]的范围将返回(26,)的维度。但如果我用rawdata[0,13]或[13,26]尝试它,它将返回三维数组:[13500,7]。那它怎么可能是一个特定的文件呢?我看不懂你的文件!跨13
的范围如何?或者尝试fdata.append(np.array(pdata))
。这样可以更容易地检查每个文件生成的形状和数据类型np.stack(fdata,axis=0)
可用于连接末端的所有数组。数组的形状似乎随大小而变化?我不明白!还要检查数据类型。你的一个或多个文件有不同的布局。重要的不是总数;这是文件内容。看到我的模拟文件读取。感谢您的解释!但问题是。指定rawdata[0:26]的范围将返回(26,)的维度。但如果我用rawdata[0,13]或[13,26]尝试它,它将返回三维数组:[13500,7]。那它怎么可能是一个特定的文件呢?我看不懂你的文件!跨13
的范围如何?或者尝试fdata.append(np.array(pdata))
。这样可以更容易地检查每个文件生成的形状和数据类型np.stack(fdata,axis=0)
可用于连接末端的所有阵列。