我如何计算以下数组中的0和1的数量?
y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
y.count(0)为:
numpy。Ndarray对象没有属性计数
我如何计算以下数组中的0和1的数量?
y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
y.count(0)为:
numpy。Ndarray对象没有属性计数
当前回答
另一个简单的解决方案可能是使用numpy.count_nonzero():
import numpy as np
y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
y_nonzero_num = np.count_nonzero(y==1)
y_zero_num = np.count_nonzero(y==0)
y_nonzero_num
4
y_zero_num
8
不要让这个名字误导了你,如果你像例子中那样使用布尔值,它会达到目的的。
其他回答
using numpy.count
$ a = [0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1]
$ np.count(a, 1)
y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
如果你知道它们是0和1
np.sum(y)
给出1的个数。Np.sum (1-y)给出0。
一般来说,如果你想计算0而不是0(但可能是2或3):
np.count_nonzero(y)
给出非零的个数。
但是如果您需要更复杂的东西,我不认为numpy将提供一个很好的计数选项。在这种情况下,转到集合:
import collections
collections.Counter(y)
> Counter({0: 8, 1: 4})
这就像字典一样
collections.Counter(y)[0]
> 8
您可以使用字典理解来创建简洁的一行代码。更多关于字典理解的内容可以在这里找到
>>> counts = {int(value): list(y).count(value) for value in set(y)}
>>> print(counts)
{0: 8, 1: 4}
这将创建一个字典,将ndarray中的值作为键,并将值的计数分别作为键的值。
当您想要计算该格式数组中某个值的出现次数时,这种方法就可以工作。
老实说,我发现最容易转换为熊猫系列或DataFrame:
import pandas as pd
import numpy as np
df = pd.DataFrame({'data':np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])})
print df['data'].value_counts()
或者是Robert Muil的一句俏皮话:
pd.Series([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1]).value_counts()
这可以用下面的方法轻松完成
y = np.array([0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1])
y.tolist().count(1)