如何计算元素在数组中特定位置出现的次数?

时间:2017-05-01 02:23:09

标签: python arrays matrix bigdata

我有大量的零和一些数组,就像这样 - 每个数组的数组长度为812.

using (var context = new ClientContext(webUrl))
{
    context.Credentials = new SharePointOnlineCredentials(userName,password);
    var list = context.Web.Lists.GetByTitle(listTitle);
    var item = list.GetItemById(itemID);
    var user = context.Web.EnsureUser(accountName);
    context.Load(user);
    context.Load(list);
    context.Load(item);
    context.ExecuteQuery();

    // If the properties are enabled on the list then disable them
    bool updateList = list.ForceCheckout || list.EnableVersioning;
    if (list.ForceCheckout) list.ForceCheckout = false;
    if (list.EnableVersioning) list.EnableVersioning = false;
    if (updateList)
    {
        list.Update();
        context.ExecuteQuery();
    }

    // Now set the fields that are normally locked
    item["Modified"] = DateTime.Now;
    item["Created"] = DateTime.Now.AddDays(-3);
    item["Author"] = user.Id;
    item["Editor"] = user.Id;

    item.Update();
    context.ExecuteQuery();
}

我想要做的是计算在第一,第二,......第812位置出现1和0的次数。任何想法或想法都表示赞赏。 我想要的是一个像这样的数组: a = [1, 0, 0, 1, 0,....] b = [0, 1, 0, 0, 1,....] . . . x = [0, 1, 0,..........] 其中元组的第一个元素在第一个位置(索引)给出1的数量,第二个元素给出0的数量。这些数组用于存储Naive Bayes分类器实现的812个功能。

3 个答案:

答案 0 :(得分:0)

总和的想法也会起作用,但我有想法转换列表然后为每一行运行collections.Counter

import numpy as np
import collections

nums = [
    [1, 0, 0, 1, 0],
    [0, 1, 0, 0, 1],
    [0, 1, 0, 1, 1]
]

np_nums = np.array(nums)
transposed = np.transpose(np_nums)
for i, row in enumerate(transposed):
    print("Index {} {}".format(i, dict(collections.Counter(row))))

输出:

Index 0 {1: 1, 0: 2}
Index 1 {0: 1, 1: 2}
Index 2 {0: 3}
Index 3 {1: 2, 0: 1}
Index 4 {0: 1, 1: 2}

这意味着在索引0处有一个零和两个零,在索引1处有一个零和两个零

答案 1 :(得分:-1)

这是我根据你的问题理解的

def arrayCount(arrays, index):
    data = {}
    for x in arrays:
        if data.get(x[index]) is None:
            data[x[index]] = 1
        else:
            data[x[index]] += 1
    return data


a = [1, 0, 0, 1, 0]
b = [0, 1, 0, 0, 1]
x = [0, 1, 0, 1, 1]
y = [0, 1, 0, 1, 1]
z = [0, 2, 0, 1, 1]

arrays = [a, b, x, y, z]
print arrayCount(arrays, 1)

'''OUTPUT'''
# {0: 1, 1: 3, 2: 1}

答案 2 :(得分:-1)

这里我提供了一个通用解决方案(你可以将它用于包含0和1的数组中的任何值)。将所有列表组合成numpy nd-array,因为所有列表都具有相同的长度

import numpy as np
concat_array = np.concatenate((a,b,c,...x), axis=0)

查找沿轴的值出现次数= 0(列式)并组合形成元组

# use loop if have more unique values
n_ones = (concat_array = 1).sum(axis=0)
n_zeros = (concat_array = 0).sum(axis=0)
#zip it to form a tuple
result = list(zip(n_ones, n_zeros))

打印(结果)

[(1, 2), (2, 1), (1, 2), (0, 3)] #a dummy result