为数组中尚不存在的缺失数据赋值
Assign value to missing data that isn't already in the array
我有一个简单的数组,a
,包含 1
和 10
之间的九个值。此数组中缺失的数据点的值为 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
。
我有一个简单的数组,a
,包含 1
和 10
之间的九个值。此数组中缺失的数据点的值为 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
。