python 中嵌套 for 循环中的二维数组?
2D array in a nested for loop in python?
我是 python 的新手,一直在尝试从 excel 文件中读取数据集并将其存储在 arrays/lists 中。
我正在使用 "openpyxl" 来处理 excel 文档,因此存在一些非标准语法,但是,所有这些似乎都有效,我认为问题在于二维数组位。
这可能是一个非常基本的菜鸟错误,但由于我习惯于使用 C++ 工作,所以我很难弄清楚它!
(为了清楚起见,我已经包含了打印语句,因为这就是我尝试解决问题的方式)
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import math as mth
import scipy as science
from array import array
from openpyxl import load_workbook
wb2 = load_workbook(r'C:"path and file name"')
ws1 = wb2.active
timeArray = [None]*630
voltageArray = [[None]*25,[None]*630]
i=0
j=0
for i in range (0, 625):
j=0
timeArray[i] = ws1.cell(row = i+1, column = 4).value
for j in range (0, 15):
voltageArray[j][i] =(ws1.cell(row = i+1, column = j+5).value)
print(j, i)
print(voltageArray[j][i])
准确打印出来;
0 0
-30
1 0
-29
到目前为止,哪些是正确的数字,但此时它失败并给出以下错误;
IndexError Traceback (most recent call last)
<ipython-input-9-fa1751a1a2f2> in <module>()
20 timeArray[i] = ws1.cell(row = i+1, column = 4).value
21 for j in range (0, 15):
---> 22 voltageArray[j][i] =(ws1.cell(row = i+1, column=j+5).value)
23 print(j, i)
24 print(voltageArray[j][i])
IndexError: list index out of range
电子表格中没有任何内容会导致此问题,因为下一个单元格已填充且格式与前两个单元格完全相同。
我假设我设置或使用二维数组的方式有问题 "voltageArray"
我已经从类似问题的答案中尝试了几个修复程序,但无法使它们中的任何一个正常工作。
如有任何帮助,我们将不胜感激!
您正在导入 numpy
,所以您不妨使用它 :)
Numpy 数组对于这种类型的使用更加高效和通用*
问题是您没有按预期的形状创建 voltageArray
,您实际上是将其初始化为两个列表的列表,第一个内部列表的长度为 25,第二个第二个内部列表的长度为 630。您实际上想要一个形状为 (25, 630) 的二维数组。
timeArray = np.zeros(625) # Array of 625 zeros
voltageArray = np.zeros((25, 630)) # Array of zeros of shape (25,630)
for i in range(0, 625):
timeArray[i] = ws1.cell(row = i+1, column = 4).value
for j in range (0, 15):
voltageArray[j, i] =(ws1.cell(row = i+1, column = j+5).value)
print(j, i)
print(voltageArray[j, i])
*List
在您不知道它们有多大或将包含哪些对象时非常有用。但是在这里,你知道形状和内容,所以最好使用 numpy.array
.
我是 python 的新手,一直在尝试从 excel 文件中读取数据集并将其存储在 arrays/lists 中。
我正在使用 "openpyxl" 来处理 excel 文档,因此存在一些非标准语法,但是,所有这些似乎都有效,我认为问题在于二维数组位。
这可能是一个非常基本的菜鸟错误,但由于我习惯于使用 C++ 工作,所以我很难弄清楚它!
(为了清楚起见,我已经包含了打印语句,因为这就是我尝试解决问题的方式)
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import math as mth
import scipy as science
from array import array
from openpyxl import load_workbook
wb2 = load_workbook(r'C:"path and file name"')
ws1 = wb2.active
timeArray = [None]*630
voltageArray = [[None]*25,[None]*630]
i=0
j=0
for i in range (0, 625):
j=0
timeArray[i] = ws1.cell(row = i+1, column = 4).value
for j in range (0, 15):
voltageArray[j][i] =(ws1.cell(row = i+1, column = j+5).value)
print(j, i)
print(voltageArray[j][i])
准确打印出来;
0 0
-30
1 0
-29
到目前为止,哪些是正确的数字,但此时它失败并给出以下错误;
IndexError Traceback (most recent call last)
<ipython-input-9-fa1751a1a2f2> in <module>()
20 timeArray[i] = ws1.cell(row = i+1, column = 4).value
21 for j in range (0, 15):
---> 22 voltageArray[j][i] =(ws1.cell(row = i+1, column=j+5).value)
23 print(j, i)
24 print(voltageArray[j][i])
IndexError: list index out of range
电子表格中没有任何内容会导致此问题,因为下一个单元格已填充且格式与前两个单元格完全相同。
我假设我设置或使用二维数组的方式有问题 "voltageArray"
我已经从类似问题的答案中尝试了几个修复程序,但无法使它们中的任何一个正常工作。
如有任何帮助,我们将不胜感激!
您正在导入 numpy
,所以您不妨使用它 :)
Numpy 数组对于这种类型的使用更加高效和通用*
问题是您没有按预期的形状创建 voltageArray
,您实际上是将其初始化为两个列表的列表,第一个内部列表的长度为 25,第二个第二个内部列表的长度为 630。您实际上想要一个形状为 (25, 630) 的二维数组。
timeArray = np.zeros(625) # Array of 625 zeros
voltageArray = np.zeros((25, 630)) # Array of zeros of shape (25,630)
for i in range(0, 625):
timeArray[i] = ws1.cell(row = i+1, column = 4).value
for j in range (0, 15):
voltageArray[j, i] =(ws1.cell(row = i+1, column = j+5).value)
print(j, i)
print(voltageArray[j, i])
*List
在您不知道它们有多大或将包含哪些对象时非常有用。但是在这里,你知道形状和内容,所以最好使用 numpy.array
.