我有一个包含X
个用户数据的列表N
。我希望得到每个用户的相对频率分布。
l1 = list()
for i in range(0,N):
tmp = np.array(X[i])
tmp = tmp[tmp < tr]
tmp = np.histogram(tmp, x)
l1.append(tmp[0]/sum(tmp[0]))
有没有办法避免这种循环?
答案 0 :(得分:0)
我认为我得到了你要求的内容:如何避免使用range
并避免诉诸l1
。如果是这种情况,您可以使用发电机,试试这个:
def iter_on_items(X):
for item in X:
tmp = np.array(item)
tmp = tmp[tmp < tr]
tmp = np.histogram(tmp, x)
yield tmp[0]/sum(tmp[0])
然后你需要通过这样做来消费它:
for result in iter_on_items(X):
print(result)
答案 1 :(得分:0)
使用map
怎么样?这是函数内置函数,它接受函数和迭代作为输入,并将函数应用于迭代中的每个元素。我直接翻译了您上面的内容,但您可以将这些内容合并到较少的map
次调用中。
l1 = list(map(lambda a: np.array(a), X))
l1 = list(map(lambda a: a[a < tr], l1))
l1 = list(map(lambda a: np.histogram(a, X), l1))
l1 = list(map(lambda a: a[0]/sum(a[0]), l1))
答案 2 :(得分:0)
使用map
:
def op(A):
tmp = np.array(A)
tmp = tmp[tmp < tr]
tmp = np.histogram(tmp, x)
return tmp[0]/sum(tmp[0])
# creates a generator
map(op, X)
# or, to get a list
l1 = list(map(op, X))