分配给uint Numpy数组中缺失值的值

雅典娜智慧

一个numpy数组z是由2个Python列表构成的xy其中的y可以是的0值和x不能连续递增的值(即可以跳过的值)。

由于y值也可以是0,它将被混淆分配遗漏值z0为好。

避免这种混乱的最佳实践是什么?

import numpy as np

# Construct `z`
x = [1, 2, 3, 5, 8, 13]
y = [12, 34, 56, 0, 78, 0]
z = np.ndarray(max(x)+1).astype(np.uint32)  # missing values become 0
for i in range(len(x)):
    z[x[i]] = y[i]

print(z)        # [ 0 12 34 56  0  0  0  0 78  0  0  0  0  0]
print(z[4])     # missing value but is assigned 0
print(z[13])    # non-missing value but also assigned 0
密码

您通常可以np.nan为中不存在的索引分配或任何其他值x

另外,不需要for循环您可以直接y在一行中分配所有值,如我在此处所示。

但是,由于您正在将类型转换为uint32,因此无法使用np.nan为什么不这样做?)。取而代之的是,您可以使用大量的选择例如999999),这些选择根据设计不会显示在中y有关更多详细信息,请参考下面参考”部分中共享的链接

import numpy as np

x = [1, 2, 3, 5, 8, 13]
y = [12, 34, 56, 0, 78, 0]
# cannot use np.nan with uint32 as np.nan is treated as a float
# choose some large value instead: 999999 
z = np.ones(max(x)+1).astype(np.uint32) * 999999 
z[x] = y
z

# array([999999,     12,     34,     56, 999999,      0, 999999, 999999,
#            78, 999999, 999999, 999999, 999999,      0], dtype=uint32)

参考文献

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章