我试图使用np.equal()
实现数组之间的比较-我不能使用==
,因为我想创建某种动态条件列表,将其作为np.select()
的参数。
然而,数据类型似乎有问题,比较不起作用。下面是一段代码:
a = np.full((2,3), 'C', dtype='<U5')
b = np.array([['C', 'B', 'A'], ['B', 'C', 'C']], dtype='<U5')
display(a.shape, b.shape)
display(a.dtype, b.dtype)
np.equal(a, b)
>>>
(2, 3)
(2, 3)
dtype('<U5')
dtype('<U5')
---------------------------------------------------------------------------
UFuncTypeError Traceback (most recent call last)
Input In [17], in <cell line: 5>()
3 display(a.shape, b.shape)
4 display(a.dtype, b.dtype)
----> 5 np.equal(a, b)
UFuncTypeError: ufunc 'equal' did not contain a loop with signature matching types (<class 'numpy.dtype[str_]'>, <class 'numpy.dtype[str_]'>) -> None
是否有一个解决方案来实现我所需要的?
感谢@cromod,他对这个问题发表了一个彻底的回答,以下似乎工作得很好:
np.core.defchararray.equal(a, b)
>>>
array([[ True, False, False],
[False, True, True]])
我猜这与数组的元素不是数值而是字符串值有关。