我想用原始数组的特定元素创建一个新数组。 我创建了一个最小的例子,在那里它实现了我想要实现的目标,但是在实际数据上却没有,我无法找出本质上的区别。在
首先是最简单的例子: 我想得到字母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
我收到了
^{pr2}$现在有了实际数据:
years = 9
yearsf = 4
np.shape(B_new) = (244, 181)
np.shape(B_feat) = (243, 76)
我想要一个新的数组B峎feat,它忽略了B峎new的第一行和第一列,然后跳过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üu feat),并且我无法确定索引在哪里上升到80。在
由于我是python和这个论坛的新手,请让我知道我是否可以改进我的问题或任何不明确的陈述。在
简而言之,你已经超出了错误提示的范围, 对于最简单的例子也是如此。 首先,我不知道为什么它对最小的例子有效。在
详细回答: 在最小的示例中,}索引的
B_new
具有从0
到{6
列。 内部循环迭代B_new
的列数。 对于每个迭代,它将j
递增yearsf
,即3
。 在第三次迭代中,j
是6
,它大于最大索引5
。 索引k
也有同样的问题。在建议: 内部循环中的迭代次数必须是组数 要处理的列数,
2
在最小示例中。按列组,I 简单地说是“a-C”下面的一组列。 你的循环可以变成这样:注意,我删除了开始
我建议你把外部循环变成
B_new
片中的+1
,并设置了k
从^{for i in range(B_feat.shape[0])
并删除语句i+=1
相关问题 更多 >
编程相关推荐