python - 使用for循环时索引越界

标签 python arrays

我想用原始数组的特定元素创建一个新数组。 我创建了一个最小的示例,它可以实现我想要实现的目标,但在实际数据上却没有,我无法找出本质区别。

首先是最小的例子: 我想获取字母 A-C 下每一行的编号,并将其保存在数组 B_feat 中。

    import numpy as np
    years  = 5 #A-E
    yearsf = 3 #A-C

    B_new =(['0','A','B','C','D','E','A','B','C','D','E'],
            ['X','2','3','3','3','4','6','5','4','3','4'],
            ['Y','3','4','6','7','3','2','4','7','9','8'],
            ['Z','3','4','6','3','4','6','9','1','4','7']) 

    B_feat = np.zeros((3,2*yearsf))     

    i=0
    for row in B_feat:
        j=0    
        k=0
        for element in row:
            B_feat[i][j:int(j+yearsf)]=B_new[i+1][k+1:int(k+yearsf+1)]
            j+=yearsf
            k+=years
        i+=1        

    print B_feat

我收到了

[[ 2.  3.  3.  6.  5.  4.]
 [ 3.  4.  6.  2.  4.  7.]
 [ 3.  4.  6.  6.  9.  1.]]

现在有了我的实际数据:

    years  = 9
    yearsf = 4
    np.shape(B_new)  = (244, 181)
    np.shape(B_feat) = (243, 76)

我想要一个忽略 B_new 的第一行和第一列的新数组 B_feat,然后跳过 9 列并始终开始“提取”接下来 9 行元素中的前 4 个元素。

    import numpy as np
    i=0
    for row in B_feat:
        j=0    
        k=0
        for element in row:
            B_feat[i][j:int(j+yearsf)]=B_new[i+1][int(k+1+years):int(k+years+yearsf+1)]
            j+=yearsf
            k+=years

        i+=1 

运行代码时,我收到以下错误:

    IndexError: index 80 is out of bounds for axis 0 with size 76

我真的不明白这个错误,因为我认为轴 0 在行的下方(我有 243 个 B_feat)并且我无法弄清楚索引在哪里上升到 80。

由于我是 python 和这个论坛的新手,如果我可以改进我的问题或任何不清楚的地方,请告诉我。

最佳答案

简短的回答,你超出了错误提示的范围, 对于似乎有效的最小示例也是如此。 我不知道为什么它首先适用于最小示例。

详细答案: 在最小示例中,B_new6 列,索引从 05。 您的内部循环遍历 B_new 的列数。 对于每次迭代,它将 j 递增 yearsf,即 3。 在第三次迭代中,j6,大于最大索引 5。 您对索引 k 有完全相同的问题。

建议: 内部循环中的迭代次数必须是组数 要处理的列数,2 在您的最小示例中。按组列,我 仅表示“A-C”下方的一组列。 你的循环可以变成这样的:

i=0
for row in B_feat:
    for j,k in zip( range(0,B_feat.shape[1], yearsf),
    range(1,B_new.shape[1], years)):
        print 'i = ', i, ', j = ', j, ', k = ', k
        B_feat[i][j:int(j+yearsf)]=B_new[i+1][k:int(k+yearsf)]
    i+=1

请注意,我删除了 B_new 切片中的 +1 并设置了 k1 开始 我会建议你把外部循环变成类似 for i in range(B_feat.shape[0]) 并删除语句 i+=1

关于python - 使用for循环时索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35893173/

相关文章:

python - 在多个文件中搜索单词的最有效方法

python - Pandas - 将行中的值设置为自身乘以另一个值

python - 如何将 python 数组转换为 cython 数组?

javascript - 从对象数组中删除相同的值

php - 我如何将新的键值对推送到数组 php?

python - 如何将许多 2D numpy 数组快速放入 4D numpy 数组中?

python - 异常发生后,字段重置或清理

python - 在 matplotlib 中更改 X(时间,而不是数字)频率的刻度频率

javascript - 以 Angular 4 过滤给定数组而不使用另一个数组并将其显示在同一组件中

C++将整数数组分配给相同大小的空整数数组