【发布时间】:2019-09-17 00:56:09
【问题描述】:
我有一个包含 NaN 值或零的数组,如下所示。我想遍历数组并以递增的顺序将每个 0 替换为整数。即,第一个零变成“1”,下一个零变成“2”,然后是“3”,依此类推。
输入:
arrayOfZeros =
array([[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[ 0., nan, nan, nan, nan],
[ 0., nan, 0., nan, 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[nan, 0., 0., 0., 0.],
[nan, 0., nan, nan, nan],
[nan, nan, 0., nan, nan],
[ 0., nan, 0., nan, 0.],
[ 0., nan, 0., nan, 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[nan, nan, 0., 0., 0.],
[nan, nan, nan, nan, 0.],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan]])
想要的输出:
[nan, nan, nan, nan, nan],
[ 1., nan, nan, nan, nan],
[ 2., nan, 19., nan, 39.],
[ 3., 11., 20., 31., 40.],
[ 4., 12., 21., 32., 41.],
[nan, 13., 22., 33., 42.],
[nan, 14., nan, nan, nan],
[nan, nan, 23., nan, nan],
[ 5., nan, 24., nan, 43.],
[ 6., nan, 25., nan, 44.],
[ 7., 15., 26., 34., 45.],
[ 8., 16., 27., 35., 46.],
[ 9., 17., 28., 36., 47.],
[10., 18., 29., 37., 48.],
[nan, nan, 30., 38., 49.],
[nan, nan, nan, nan, 50.],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan],
[nan, nan, nan, nan, nan]])
目前,我几乎可以用下面的代码做我想做的事:
with np.nditer(arrayOfZeros, op_flags=['readwrite']) as y:
preference = 1
for x in y:
if x == 0:
x[...] = preference
preference += 1
但是,如果我在 Python 控制台之外运行此代码,则会收到以下错误消息:
TypeError: Iterator operand or requested dtype holds references, but the REFS_OK flag was not enabled
在 NumPy 中是否有另一种方法可以实现这一点?
【问题讨论】:
标签: python arrays python-3.x pandas numpy