在Python中嵌套for循环中的2D数组?

时间:2015-11-24 19:44:04

标签: python arrays list multidimensional-array nested-loops

我是python的新手,并且一直在尝试从excel文件中读取数据集并将其存储在数组/列表中。

我正在使用“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”的方式有问题

我已经从类似问题的答案中尝试了几个修复,但未能使它们中的任何一个工作。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

您正在导入numpy,所以您不妨使用它:) 对于这种类型的使用,Numpy数组更加高效和通用*

问题是你没有以你期望的形状创建voltageArray,你实际上将它初始化为两个列表的列表,第一个内部列表的长度为25,第二个内部列表的长度为630.您实际上需要一个形状为(2D,630)的2D数组。

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是件好事。