为数组中尚不存在的缺失数据赋值

Assign value to missing data that isn't already in the array

我有一个简单的数组,a,包含 110 之间的九个值。此数组中缺失的数据点的值为 0.

我需要用值 0<x>10 替换数组中的这个值,但重要的是它不能是输入数组中已经存在的值。

import numpy as np
def Data(a):
    b = np.arange(1,10)
    a[a==0] = b[b != a]
    return a

我已经试过了,但它似乎比较了 a[0]b[0],然后是 a[1]b[1]

我需要它做的是将 b[0] 与数组 a 中的所有值进行比较。 如果在 a 中的任何地方都找不到 b[0] 的值,那么我需要它用 b[0] 替换值 0(数组 a 中缺失的数据点) .

有什么聪明又简单的方法吗?

这样可以确保您在 a 中具有唯一元素,并且还可以将 0 值替换为 range(1,11).

中的唯一值
>>> a = [1,2,10,0,4,0,0,3,7]
>>> unique = set()
>>> a = [x if x not in unique and not unique.add(x) else 0 for x in a]
>>> new = list(set(range(1,11)) - unique)
>>> from random import shuffle
>>> shuffle(new)  # this step may be unnecessary...
>>> [new.pop() if x is 0 else x for x in a]
[1, 2, 10, 9, 4, 8, 6, 3, 7]

我认为您正在寻找 numpy.in1d,例如:

a[a == 0] = b[~np.in1d(b, a)]

对于布尔数组,~ 充当 not