【问题标题】:Comparing string to empty array, get FutureWarning将字符串与空数组进行比较,获取 FutureWarning
【发布时间】:2017-08-07 14:03:40
【问题描述】:

我构造了一个函数,将字符串与字符串数组进行比较,如下例所示:

'A'==np.array(['A','B'])

array([ True, False], dtype=bool)

我想要的是那个布尔数组,但有时我要比较的数组是空的,我会收到警告。当我运行以下命令时,我能够重现 FutureWarning:

'A'==np.array([])

/Users/fedgar01/anaconda/lib/python2.7/site-packages/ipykernel_launcher.py:1: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  """Entry point for launching an IPython kernel.

我应该忽略警告还是我做错了什么?

【问题讨论】:

  • 那么重点是,您如何将标量 'A' 与空列表进行比较?答案应该是什么?因此,它返回比较两个操作数,因此只返回False不是一个空数组...
  • 对于我的函数,我确实希望它在这种情况下输出False。所以听起来忽略警告是最好的做法?
  • 确实如此。那么就没有问题了。尽管正如警告所说,将来它们可能会返回一个空数组np.array([])

标签: python arrays numpy boolean


【解决方案1】:
In [16]: np.array(['A','B'])
Out[16]: 
array(['A', 'B'],
      dtype='<U1')
In [17]: 'A'==np.array(['A','B'])
Out[17]: array([ True, False], dtype=bool)

In [18]: 'A'==np.array([])
/usr/local/bin/ipython3:1: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  #!/usr/bin/python3
Out[18]: False

如果我指定了正确的字符串 dtype,我会得到空布尔值:

In [19]: 'A'==np.array([],dtype='<U1')
Out[19]: array([], dtype=bool)

空数组的默认dtype是float;数值比较运行时没有警告:

In [20]: np.array([]).dtype
Out[20]: dtype('float64')
In [21]: 12.34==np.array([])
Out[21]: array([], dtype=bool)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多