首页 > 解决方案 > Python 错误 - “数组索引过多”

问题描述

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

我尝试使用函数而不是 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

标签: pythonarraysnumpy

解决方案


如果你从一个只包含一个元素的列表中创建一个 numpy 数组,你会得到一个形状为 (,1) (只有一维)的数组,而如果列表中有更多元素,你会得到一个形状像(文件数,1)(二维)。我建议在r创建 numpy 数组后对其进行整形。

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

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


推荐阅读