我有一些非常长的代码,我知道使用for循环可以更有效地完成。 对于上下文,“矩阵”是我的数据集,我需要提取第二列等于1,2,3 ... 20的所有值,并将这些值的最后四列相加(得到20x4矩阵)总和值)
但我需要使用循环编写它,我猜一个for循环。
我尝试了以下内容:
M=np.zeros([20,10]) #creating empty matrix to fill in
for i in range(1,21):
M=matrix[matrix[:,1]==i]
sub=sum(M[:,6:10])
但结果只是循环的最后一次运行,即stackD [stackD [:,1] == 20]的值。 如何使用for循环执行此操作? 提前谢谢。
答案 0 :(得分:1)
您的问题是您在每次循环迭代(M
)时反复覆盖M=...
。
这是一个使用循环的正确解决方案:
M = np.stack([stackD[stackD[:,1] == i+1, 6:10].sum(axis=0)
for i in range(12)])
答案 1 :(得分:0)
在新代码中,M
是一个变量,并在for循环中重复给出一个新值。如果要存储每次迭代的结果,则需要创建一个列表。请注意,当您使用数字命名变量时,这几乎总是意味着您应该使用列表。例如,sub1
,sub2
,sub3
等可以替换为列表:
sub = []
dat = []
for i in range(1,13):
sub.append(stackD[stackD[:,1]==i])
dat.append(sum(sub[i]))
现在,您可以使用sub[5]
和dat[12]
等索引访问值。如果sub
从未在此循环之外使用,那么您只需要单个列表dat
:
dat = []
for i in range(1,13):
sub = stackD[stackD[:,1]==i]
dat.append(sum(sub))
<强>声明:强>
我对numpy并不熟悉,并且可能有更好的方法来使用它的工具做你想要的。我只解释如何使用for循环的基本列表。我强烈建议您了解有关列表和循环的更多信息,因为这些是编写Python程序时非常重要的工具。