一个 numpy 数组 z
由 2 个 Python 列表 x
构造而成和y
其中 y
的值可以是0
和 x
的值不会连续递增(即可以跳过值)。
自 y
值也可以是 0
,在 z
中分配缺失值会令人困惑成为0
也是如此。
避免这种困惑的最佳做法是什么?
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
最佳答案
解决方案
您通常可以为 x
中不存在的索引分配 np.nan
或任何其他值。
此外,不需要for循环。您可以在一行中直接分配 y
的所有值,如我在此处所示。
但是,由于您要类型转换为 uint32,因此无法使用 np.nan
( why not? )。相反,您可以使用您选择的较大数字(例如,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)
引用文献
关于python - 分配给 uint Numpy 数组中缺失值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63515366/