是否有更好的方法来计算SArray值?

时间:2017-06-26 07:59:42

标签: python list counter graphlab

我正在寻找一种更好的方法来计算数组值,而不是我在下面描述的(使用Python创建Graphlab)

labels = graphlab.SArray([-1, -1, 1, 1, 1])

plus_ones_count = list(labels).count(1)
# plus_ones_count outputs 3

minu_ones_count = list(labels).count(-1)
# minu_ones_count outputs 2

感谢您提出任何建议或建议。

经过额外的实验后,len(标签[labels ==])似乎做得更好(根据我的要求,所需的数字范围很小)仅供其他人参考我提供的代码我用来测量三种方法。如果你知道任何其他更好的方法(或)警告,请告诉我。

import numpy as np
from random import randint
from collections import Counter

for data_set_size in [10, 100, 1000, 10000, 100000, 1000000]:
    labels = graphlab.SArray([randint(-1,1) for p in range(0, data_set_size)])
    print "Data set size: ", data_set_size

    %timeit -n 100 l = list(labels); l.count(-1), l.count(0), l.count(1)
    %timeit -n 100 len(labels[labels == -1]), len(labels[labels == 0]), len(labels[labels == 1])
    %timeit -n 100 label_count = Counter(labels); label_count.get(-1), label_count.get(0), label_count.get(1)

3 个答案:

答案 0 :(得分:0)

您可以使用收藏品中的计数器

labels = [-1, -1, 1, 1, 1]
from collections import Counter
label_count = Counter(labels)
label_count.get(1)
  

3

label_count.most_common()
  

[(1,3),(-1,2)]

参考链接:https://docs.python.org/2/library/collections.html#collections.Counter

答案 1 :(得分:0)

你可以使用我使用的这个简单的黑客。

plus_one_count = labels.where(labels == 1, 1, 0).sum()

#plus_one_count = graphlab.SArray.where(labels == 1, 1, 0).sum()

minu_ones_count = labels.where(labels == -1, 1, 0).sum()

它只返回一个SArray,其中条件为True,否则为零,然后将其求和。

您可以找到此here的文档。

希望这能解决你的问题。

答案 2 :(得分:0)

来源

labels = graphlab.SArray([-1, -1, 1, 1, 1])
print (labels == -1).nnz()
print (labels == 1).nnz()

输出

2
3

链接

https://turi.com/products/create/docs/generated/graphlab.SArray.nnz.html