对数组中的值进行分组

时间:2016-09-27 17:32:05

标签: python arrays numpy

我有一个大小为a * 2的numpy数组。 (a的典型大小为100)。在第一列中是x_smallest和x_largest之间的值。在第二列中是相应的y值。现在几乎所有x值都是唯一的,所以我想将它们分组。就像第一组从值x_smallest到x_1一样。第二组从x_1到x_2。 (x_smallest< x_1< ... x_largest)。这应该是可调节的,这样我才能找到有用的尺寸。我应该提到x值不是整数,但y值是整数。 (y值介于1和N之间)现在我想知道每组中“n> 1”y值与“1”y值的比例。以下是示例数组的一小部分:

2.750000000000000000e+00,2.000000000000000000e+00
3.100000000000000089e+00,5.000000000000000000e+00
2.649999999999999911e+00,2.000000000000000000e+00
2.500000000000000000e+00,2.000000000000000000e+00
3.100000000000000089e+00,2.000000000000000000e+00
2.799999999999999822e+00,5.000000000000000000e+00
3.450000000000000178e+00,4.000000000000000000e+00
3.200000000000000178e+00,5.000000000000000000e+00
3.200000000000000178e+00,3.000000000000000000e+00
2.399999999999999911e+00,1.000000000000000000e+00 

输出数组可能如下所示:

1.5, 0
2.5, 0.2
3.5, 0.5

(这里x_values是x_i和x_i + 1区域的中点。)这里的输出示例显然不适合示例数组。您有什么想法可以轻松完成吗?我只能考虑制作许多特定的if else命令,这些命令对于一般情况不会很有帮助。

1 个答案:

答案 0 :(得分:0)

好吧,我想我自己解决了这个问题。这是解决方案,以防有人遇到类似问题并发现这个问题:

numgroup = 5  # Number of Groups
dmimax = numpy.amax(dmivsstasta[:, 0])  # Gets x_largest
dmimin = numpy.amin(dmivsstasta[:, 0])  # Gets x_smallest
stamax = numpy.amax(dmivsstasta[:, 1])  # Gets y_largest
stepsize = (dmimax-dmimin)/5.0  # Determines size of a group

grouparray = numpy.zeros((5, stamax+1)) # Creates array in which everything is saved


for x in range(numgroup):
    grouparray[x, 0] = dmimin+stepsize/2.0+x*stepsize  # Saves midpositon of 
                                                         each group at first column
print(grouparray)  # Just to check values
print(dmimin)
print(dmimax)
print(stepsize)

for x1 in range(numgroup):  # Iterates over all values
    for x2 in range(rd):
        if (grouparray[x1, 0]-stepsize/2.0) <= dmivsstasta[x2, 0] 
        < (grouparray[x1, 0]+stepsize/2.0):
            grouparray[x1, dmivsstasta[x2, 1]] += 1

print(grouparray)

唯一缺少的部分是计算比例,现在使用grouparray

很容易