【问题标题】:count number of items in np.where() array python计算 np.where() 数组 python 中的项目数
【发布时间】:2017-04-22 17:24:18
【问题描述】:

我目前正在尝试比较 pandas DataFrame 中的两列:

--------------- Cluster Assignment ---------------
           ID      Class   Cluster
    0   1000025      2        4
    1   1002945      2        2
    2   1015425      2        4
    3   1016277      2        2
    4   1017023      2        4
    5   1017122      4        2
    6   1018099      2        4
    7   1018561      2        4
    8   1033078      2        4
    9   1033078      2        4
    10  1035283      2        4
    11  1036172      2        4
    12  1041801      4        4
    13  1043999      2        4
    14  1044572      4        2
    15  1047630      4        4
    16  1048672      2        4
    17  1049815      2        4
    18  1050670      4        2
    19  1050718      2        4

试图找到不匹配的行数以找到我的数据框中的错误比率(完整的 df 比这长得多)。我正在使用np.where() 进行比较,并且我得到了所有不正确行的准确输出,但现在我想添加错误行数,然后将其除以总行数。 . 我现在的问题是:

>>> data= np.where(df7['Class']!=df7['Cluster'])
>>> print(len(data))
1

如果我打印数据类型,我会得到< class 'tuple' >。因此,我尝试使用以下方法从元组转换为列表:

>>> print(list(data))
[array([  9,  11,  17,  31,  32,  33,  34,  36,  38,  62,  64,  65, 135,
   156, 196, 201, 277, 301], dtype=int64)]

显然,这没有帮助,因为如果我尝试打印/存储该列表的长度,我会得到

>>> print(list(data))
[array([  9,  29,  30,  31,  33,  35,  59,  61,  62, 132, 153, 193, 198,
   274, 298], dtype=int64)]
>>> print('errors: ', len(cluster2wrong))
errors:  1

有人能指出我如何计算这些项目的方向吗?

【问题讨论】:

  • 您是否尝试过在您的第一个示例中使用print(len(data[0]))
  • data 是一个元组,数组的每个维度一个项目。 data[0] 是一个数组,是其中一个维度的索引。
  • data 的结构实际上是什么样的?将其转换为其他内容只是为了计算您感兴趣的元素数量似乎毫无意义,您只需查询返回的内容的大小即可。或者你真正追求的任何子部分。
  • @hpaulj 只是抓住了 len(data[0]) 让我得到了我正在寻找的信息。我能够将它除以我从中提取的原始 df 的长度,并得到我的错误率。现在的问题是,在我运行它的一半时间里,我得到了 4% 的错误率,而另一半得到了 95% 的错误率。不知道为什么会这样,但这是另一个问题,我想!谢谢!
  • @pvg 数据是三列,一个标识符号,一个类别(2 或 4,基于患者的癌细胞是良性还是恶性),以及我开发了一个 k 的“集群”结果-means 算法,看看我是否可以训练一个模型来预测正确的类。这是从不同的数据库中提取的,这就是我现在所处的位置:)

标签: python arrays numpy tuples


【解决方案1】:

np.where 的结果是一个包含n 数组的tuple,其中n 是数组中的维数。好消息是这些 n 数组中的每一个都具有相同的长度(每个数组代表每个找到的项目的一个“索引”),因此您可以使用其中任何一个的长度:

>>> len(data[0])  # or len(data[i]) where i < dimensions of your df7

正如 cmets 中已经提到的。但是,如果您只想知道有多少项满足条件,您可以使用np.count_nonzero

>>> a = np.array([2,3,4,5])
>>> b = np.array([3,3,3,3])

>>> np.count_nonzero(a != b)
3

【讨论】:

  • 第一个例子,len(data[0]) 是票。现在找出为什么我的 k-means 算法在一半时间给我 4% 的错误率,而在另一半时间给我 95% 的错误率哈哈
  • 假设您将 4% 和 95% 的值四舍五入可以加起来为 100%(四舍五入会引入 +/- 1,因此这是可能的)。这听起来不像是巧合。请重新检查您的公式是否存在可能的错误。 :)
  • 我已经查看了大约 4 次,仍然无法弄清楚。不知道为什么它在某些时候确实有效,而在没有任何变化的情况下其他时候则无效。不管是对是错,你都会认为它每次都会做同样的事情。确实很奇怪。
  • @NickBohl 您可以提出一个新问题,假设您可以提供一些最少的数据来重现该问题。
猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多