我有这段代码:
child rows
它应该通过“posvcs”第2列(每行)查看两个不同值之间的值(以度为单位)。例如,如果我想让我的馅饼以45度的增量切成8块而我的数据集(posvcs)具有度数值在0和0之间的点。 360,我希望它首先只看到所需的度数= 0到45.然后,取相应的行&列,将数据放入“dataset0”。然后,它会将45到90度的数据放入“dataset1”。
它正在做的是获取“dd”行数(因此在我的示例中,它占用前45行)并且仅备份该数据。然后,而不是“开始”和“结束”值更改为移动到指定的下一个角度增量,它保持在45。
非常感谢任何帮助!
编辑:错字的错字。它现在写在我的程序中。
答案 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