python - 在 numpy 数组中设置空值

标签 python arrays numpy

如何根据条件清空 numpy 数组中的某些值? 我不明白为什么在不满足条件的情况下我最终得到 0 而不是 null 或空值... b 是一个填充了 0 和 1 值的 numpy 数组,c 是另一个完全填充的 numpy 数组。所有数组都是71x71x166

a = np.empty(((71,71,166)))
d = np.empty(((71,71,166)))
for indexes, value in np.ndenumerate(b):
    i,j,k = indexes
    a[i,j,k] = np.where(b[i,j,k] == 1, c[i,j,k], d[i,j,k])

我想得到一个数组,它只有满足条件的值,其他地方都是空的,但不改变它的形状

按要求进行澄清的完整问题:
我从一个形状为 (71,71,166) 的浮点填充数组开始
我根据应用于 float 数组的截止值制作了一个 int 数组,基本上创建了许多 bin,粗略地标记出数组中的 10 个区域,中间有 0 个值
我想要最终得到的是一个形状为 (71,71,166) 的数组,它具有某个特定“bin”的特定数组方向(假设垂直方向,如果您将 3D 数组视为 3D 立方体)的平均值...
所以我试图遍历“bins”b == 1,b == 2 等,对满足该条件但在其他地方为空的 float 进行采样,这样我就可以取平均值,然后在最后重新组合成一个数组循环的……
不确定我是否让自己明白了。我正在使用 np.where 并使用索引,因为当我尝试不这样做时我会不断出错,尽管它感觉效率很低。

最佳答案

考虑这个例子:

import numpy as np
data = np.random.random((4,3))
mask = np.random.random_integers(0,1,(4,3))
data[mask==0] = np.NaN

mask 为 0 时,数据将被设置为 nan。当然,您可以使用任何您想要的条件,或者对不同的值执行不同的操作在 b.

要删除特定垃圾箱以外的所有内容,请尝试以下操作:

c[b!=1] = np.NaN

因此,要复制特定容器中的所有内容:

a = np.copy(c)
a[b!=1] == np.NaN

获取容器中所有内容的平均值:

np.mean(c[b==1])

所以也许这可能会做你想做的事(其中 bins 是 bin 值的列表):

a = np.empty(c.shape)
a[b==0] = np.NaN
for bin in bins:
    a[b==bin] = np.mean(c[b==bin])

关于python - 在 numpy 数组中设置空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27527947/

相关文章:

c - 在 C 中序列化/转置数据(PIC 32)

arrays - 将字符串拆分为数组并对每个字符 Swift 执行特定操作

python - 在 Python 中处理 pandas DataFrames 列划分中的零

python - 忽略前面没有定界符的可选后缀

python - 以尽可能小的数量增加 float32(目前使用 numpy)

python - 将 Markdown 标题标签替换为 Python Markdown 中的自定义标签

Python ez_install : UnicodeDecodeError: 'ascii' codec can't decode byte 0xae in position 11

c++ - 为什么我可以将数组的大小设置为等于 vector 的(未知)大小?

python - Python中根据特定列分解数据集

python - 从 Dataframe 中新列的索引中提取数据