Python for&如果循环不工作?

时间:2016-01-15 00:02:21

标签: python python-2.7 if-statement for-loop

我有这段代码:

child rows

它应该通过“posvcs”第2列(每行)查看两个不同值之间的值(以度为单位)。例如,如果我想让我的馅饼以45度的增量切成8块而我的数据集(posvcs)具有度数值在0和0之间的点。 360,我希望它首先只看到所需的度数= 0到45.然后,取相应的行&列,将数据放入“dataset0”。然后,它会将45到90度的数据放入“dataset1”。

它正在做的是获取“dd”行数(因此在我的示例中,它占用前45行)并且仅备份该数据。然后,而不是“开始”和“结束”值更改为移动到指定的下一个角度增量,它保持在45。

非常感谢任何帮助!

编辑:错字的错字。它现在写在我的程序中。

3 个答案:

答案 0 :(得分:1)

您可以使用numpy轻松解决此问题,http://jsfiddle.net/jGLvk/1159/非常适合以这种方式操作数字。此外,它允许您使用布尔数组作为索引,以便您可以删除很多循环。

import numpy as np
dd = input("What is your desired degree for slices? ")

limits = range(0, 360, int(dd))

# Append 361 just so we get the last group
limits.append(361)

datasets = list()

# Convert to a numpy array
pos = np.array(posvcs)

# Now group everything
for k in range(len(limits) - 1):
    inrange = np.logical_and(pos[:,2] >= limits[k], pos[:,2] < limits[k+1])
    datasets.append(pos[inrange,2])

如果您真的坚持拥有列表,可以执行以下操作来转换

datalists = [d.tolist() for d in datasets]

我建议将它们保留为numpy数组,但是如果您要从它们执行更多计算:

# Calculating the mean of each group
means = [d.mean() for d in datasets]

# Standard deviation of each group
stdevs = [d.std() for d in datasets]

高级

如果您真的想沿着numpy路径前进,可以用以下内容替换第一部分:

group_ids = np.digitize(pos[:,2], limits)
datasets = [pos[group_ids == k,2] for k in range(1, len(limits))]

答案 1 :(得分:0)

我没有看过细节,但有一个简单的错误:

if (posvcs[j,2] >= begin) & (posvcs[j,2] < end)

在Python中,使用“和”代替&amp;,这是一个按位和运算符。即。

if (posvcs[j,2] >= begin) and (posvcs[j,2] < end)

答案 2 :(得分:0)

请改用:

begin = 0
end = dd
for x in range(0,listnum):
    a["dataset{0}".format(x)] = []
    for j in range(len(posvcs)):
        if (posvcs[j][2] >= begin) and (posvcs[j][2] < end):
            a["dataset{0}".format(x)].append(posvcs[j][2])
    begin += dd
    end += dd