我用空的
ndarray
搞乱了一点,发现了一些意想不到的行为。最小工作示例:
import numpy as np
print(f"{np.empty(0)} :: {type(np.empty(0))}")
print(f"{[]} :: {type([])}")
print(f"internal -> {np.empty(0) == []} :: {type(np.empty == [])}")
external = np.empty(0) == []
print(f"external -> {external} :: {type(external)}")
给出输出:
[] :: <class 'numpy.ndarray'>`
[] :: <class 'list'>
internal -> [] :: <class 'bool'>
external -> [] :: <class 'numpy.ndarray'>
我对此有三个问题,我怀疑答案可能是相关的:
np.empty(0) == ''
返回 False)?基于尝试与空字符串进行比较时引发的
FutureWarning
,我猜测 (1) 的答案可能与 numpy 在没有元素的可迭代对象之间执行逐元素比较有关,但我并没有真正了解细节,也不知道为什么情况(2)和(3)似乎表现不同。
当您执行
np.empty(0) == ...
时,如果 ...
是可迭代的,那么它将进行元素比较。由于 np.empty(0)
为空,因此没有任何内容可比较,因此它会生成一个具有 np.ndarray
数据类型的空 bool
。它不会返回 True
/False
,因为它通常会生成布尔值数组,但它是空的。
关于“内部”/“外部”比较,该部分是一个拼写错误 - 您在“内部”版本中缺少对
np.empty
的函数调用。修正这个拼写错误,结果将是相同的。