【发布时间】:2018-04-23 20:55:24
【问题描述】:
有什么方法可以忽略 numpy 数组中的 NaN? 我的问题是我有一个带有几个 NaN 的 numpy 数组,并且我正在对数组进行数学运算,例如
dev0 = numpy.sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2)
当然,因为 NaN,所以有一个例外。 TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('S14') dtype('S14') dtype('S14')
那么,有没有什么办法,上面的操作成功了NaN,但是数组dev0的大小和x0一样。
编辑,在下面几个cmets之后:
这是我正在读取的 YAML 文件。
- { x: 5.4725573730468750e+02, y: -3.4774234008789062e+02 }
- { x: 3.8519703125000000e+04, y: 6.4700851440429688e+01 }
- { x: 5.8734118652343750e+02, y: -3.4341723632812500e+02 }
- { x: 8.8773913574218750e+02, y: -3.4931005859375000e+02 }
- { x: 4.0723339843750000e+02, y: -3.4757397460937500e+02 }
- { x: NaN, y: -65535. }
代码-
collision_points = yaml_load["points"]
# the entries in collision_points are not read as strings
collision = list()
for count in range(len(collision_points)):
xy = list()
xy.append(collision_points[count]["x"])
xy.append(collision_points[count]["y"])
collision.append(xy)
data = numpy.array(collision)
x0, y0 = data.T
# x1, y1 comes from somewhere else. Its also a numpy array
dev0 = numpy.sqrt((x0 - x1) ** 2 + (y0 - y1) ** 2)
【问题讨论】:
-
您希望 NaN 元素会发生什么?
-
一个差距。哪里有 Nan,dev0 也有一个 NaN
-
不确定我是否遵循,尽管有 NaN,但应该保留您的形状。
-
那与 NaN 无关,你为什么要对字符串进行算术运算?
-
您是否可能将输出写为字符串,然后尝试使用
eval将其读回并最终得到类似np.array([1, 3, 'nan', 5])而不是np.array([1, 3, np.nan, 5])的内容?如果是这样……也不要那样做。