如何在这里使用循环,python(在矩阵中保存for循环的所有结果)

时间:2018-01-15 19:43:27

标签: python matrix

我有一些非常长的代码,我知道使用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循环执行此操作? 提前谢谢。

2 个答案:

答案 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循环中重复给出一个新值。如果要存储每次迭代的结果,则需要创建一个列表。请注意,当您使用数字命名变量时,这几乎总是意味着您应该使用列表。例如,sub1sub2sub3等可以替换为列表:

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程序时非常重要的工具。