我正在寻找一种更好的方法来计算数组值,而不是我在下面描述的(使用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)
答案 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