Python错误-“数组索引过多”

时间:2019-04-06 12:43:38

标签: python arrays numpy

我有一个代码可以读取一个文件并保存到矩阵中。但是我想读取几个文件并将其保存到一个矩阵中。但是,当我尝试扩展代码以处理多个文件时,出现以下错误消息“数组的索引过多”,当我只读取一个文件时却没有得到

我试图使用函数而不是for循环,并且尝试以不同的方式应用索引(如StackOverflow上此处的其他一些线程所示),但这没有用。

这部分代码无法正常工作:

r=r[1:lengthOfDataset,1:numberOfColumns]

我的完整代码:

dataPath = ['ABB-2018-03-26-2019-03-26.csv',
    'ALFA-2018-03-26-2019-03-26.csv',
    'ALIV-SDB-2018-03-26-2019-03-26.csv',...]


lengthOfDataset=252
numberOfColumns=10
data=np.zeros([len(dataPath),lengthOfDataset-1,numberOfColumns-1])


for i in range(len(dataPath)):
    data[i]=readAndConvertFile(dataPath[i])


def readAndConvertFile(F):
    with open(F, 'r') as f:
        reader = csv.reader(f, delimiter=';')
        lists = list(reader)
        r = np.array(lists)
        r=r[1:lengthOfDataset,1:numberOfColumns]
        for j in range(lengthOfDataset-1):
                for k in range(numberOfColumns-1):
                    r[j,k]=num(r[j,k])
        return r


def num(s):
    try:
        s=s.replace(',','.')
        s=float(s)
        return s
    except ValueError:
        return 0

1 个答案:

答案 0 :(得分:0)

如果从仅包含一个元素的列表中创建一个numpy数组,则将获得形状为(,1)(仅一维)的数组,而如果列表中包含更多元素,则将得到像(文件数,1)(二维)这样的形状。我建议在创建numpy数组r后重塑它。

np.reshape(r,(-1,1))

这可以确保r始终具有两个维度,而无需指定行数。