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

标签 python python-3.x numpy missing-data numpy-ndarray

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

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/

相关文章:

python - “classobj”对象不可下标

python - Django NoReverseMatch 错误,美元符号添加到 url 模式

python - 如何在 Python 中对数据帧的字符串进行哈希处理?

python - Numpy 和 Pandas : Return histogram values from pandas histogram plot?

python - 导入 GDAL 会打印很多错误消息,但仍然有效

python - 使用 RE 查找仅包含拉丁字母、数字和下划线且不能以数字开头的字符串

python - 在 Python 中通过打开的套接字发出 HTTP 请求

python-3.x - 将 pandas 数据框列中的每个单词小写

64 位窗口上的 Python 32 位内存限制

python - 关于加载 npy 文件并调查其中的内容