gpt4 book ai didi

python - 在 numpy 数组中设置空值

转载 作者:太空狗 更新时间:2023-10-30 00:49:34 25 4
gpt4 key购买 nike

如何根据条件清空 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com