ide*_*dem 6 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])
Run Code Online (Sandbox Code Playgroud)
我想最终得到一个数组,该数组只有满足条件的值,并且在其他地方都是空的,但不改变它的形状
要求的全部澄清问题:
我从一个带有形状的浮动填充数组开始(71,71,166)
我根据应用于浮点数组的截止值创建一个int数组,基本上创建了一些数据库,大致标出了10个区域内的阵列,以在介于0值
我想与落得什么是与形状(71,71,166),其具有在特定的排列方向的平均值的阵列(假定垂直方向,如果你认为一个3D阵列的作为3D立方体)一个"bin"...
所以我试图循环通过"bins"b == 1,b == 2等,在满足条件的情况下对float进行采样但在其他地方为null,这样我就可以取平均值,然后在循环结束时重新组合成一个数组....
不确定我是否让自己理解.我正在使用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
Run Code Online (Sandbox Code Playgroud)
这些数据将被设置到nan的任何地方mask为0。你可以使用任何你想要的那种,当然条件,或者您在B不同的值做不同的事情。
要擦除除特定垃圾桶以外的所有内容,请尝试以下操作:
c[b!=1] = np.NaN
Run Code Online (Sandbox Code Playgroud)
因此,要复制特定容器中的所有内容:
a = np.copy(c)
a[b!=1] == np.NaN
Run Code Online (Sandbox Code Playgroud)
获取箱中所有东西的平均值:
np.mean(c[b==1])
Run Code Online (Sandbox Code Playgroud)
因此,这也许可以满足您的要求(bin是bin值的列表):
a = np.empty(c.shape)
a[b==0] = np.NaN
for bin in bins:
a[b==bin] = np.mean(c[b==bin])
Run Code Online (Sandbox Code Playgroud)
小智 4
np.empty有时用 0 填充数组;数组的内容是什么是未定义的empty(),所以 0 是完全有效的。例如,尝试这样做:
d = np.nan * np.empty((71, 71, 166)).
Run Code Online (Sandbox Code Playgroud)
但考虑使用 numpy 的优势,并且不要迭代数组:
a = np.where(b, c, d)
Run Code Online (Sandbox Code Playgroud)
(因为b是 0 或 1,所以我排除了显式比较b == 1。)
您甚至可能需要考虑使用掩码数组:
a = np.ma.masked_where(b, c)
Run Code Online (Sandbox Code Playgroud)
对于您的问题,这似乎更有意义:“如何根据条件将 numpy 数组中的某些值设为 null”(用 mask 替换 null ,就完成了)。
| 归档时间: |
|
| 查看次数: |
28698 次 |
| 最近记录: |