numpy IndexError:数组的索引太多:数组是0维的,但索引了2个

bf1o4zei  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(122)

我想通过PyQt5引入一个文本文件,并用数据值绘制一个图形。

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog
from PyQt5.QtGui import QIcon
import numpy as np
import matplotlib.pyplot as plt

class MyApp(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
        self.statusBar()

        openFile = QAction(QIcon('folder.png'), 'Open', self)
        openFile.setShortcut('Ctrl+O')
        openFile.setStatusTip('Text.txt')
        openFile.triggered.connect(self.show)

        menubar = self.menuBar()
        menubar.setNativeMenuBar(False)
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(openFile)

        self.setWindowTitle('File Dialog')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def show(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', './')

        if fname[0]:
            f = open(fname[0], 'r')

            with f:
                data = f.read()
                data2=np.array(data)
                x=data2[1:,0]
                y=data2[1:,1]

                plt.plot(x,y)
                plt.show()

 if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

文本文件照片。
这是出现的错误:

x=data2[1:,0]
IndexError: too many indices for array: array is 0-dimensional, but 2 were indexed
pengsaosao

pengsaosao1#

使用numpy时,不需要编写自己的代码来从文件加载数据。使用numpy函数来为您完成此操作。
show()中,我建议这样修改代码:

data = np.loadtxt(fname[0], skiprows=1)
x = data[:, 0]
y = data[:, 1]
plt.plot(x, y)
plt.show()
6ioyuze2

6ioyuze22#

另一个答案向您展示了如何正确地做到这一点,因此我将解释代码中的错误。
data = f.read()中,文件存储为字符串而不是数组。如果你检查它,你会看到类似x y \n1 2 \n的东西,其中\n是换行符。因此,data2 = np.array(data)最终创建了一个包含单个字符串的numpy数组。
由于数组只有一个项,因此它的维度为0,而不是您预期的两个维度。

p5cysglq

p5cysglq3#

看看你是否有双重预测。我在使用pandas时遇到了这个错误

previsores = base.iloc [:, 1:13].values
previsores = base.iloc[:,0].values

from sklearn.preprocessing import LabelEncoder
labelencoder_previsores = LabelEncoder()
previsores[:,0] = labelencoder_previsores.fit_transform(previsores[:,0])
previsores[:,1] = labelencoder_previsores.fit_transform(previsores[:,1])
previsores[:,2] = labelencoder_previsores.fit_transform(previsores[:,2])
previsores[:,3] = labelencoder_previsores.fit_transform(previsores[:,3])
previsores[:,4] = labelencoder_previsores.fit_transform(previsores[:,4])
previsores[:,5] = labelencoder_previsores.fit_transform(previsores[:,5])

相关问题