微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

布尔索引过滤后重塑数据

如何解决布尔索引过滤后重塑数据

我有一个名为 DATA 的数据集,它从单个形状 N=173(4,4,64) 文件中重新组合了几个 3D 表,因此最后名为 DATA 的 numpy 数组具有形状 { {1}}。在每个单独的文件中,我有一列是一个布尔列,用于指定数据是好是坏。为了过滤我的数据,我使用布尔条件:

(173,64)

具有以下形状:

cond = DATA[:,3,:,:]==False  
DATA_filtered = DATA[:,1,:][cond]

但是因为我在最后使用了这种技术,所以我有一个一维数组,并且初始数据集的所有结构都丢失了。一种技术是使用用于 np.shape(DATA) Out[854]: (173,64) np.shape(cond) Out[855]: (173,64) reshape 函数,但该技术仅在此时维度保持不变时才有效。在布尔条件导致可变大小表的情况下,我们不再可以预测和要求重塑。那么有没有一种方法可以过滤数据,同时保持数据的全局形状,其大小可能因数据中使用的标志而异?

这是一个最小的例子:

numpy.array

输出

TEST = np.ones((173,64))
FLAG = np.random.choice(a=[False,True],size=(173,64))

cond = FLAG==False

data = TEST[:,:][cond]

预期输出

np.shape(data)
Out[868]: (22167,)

例如np.shape(data) Out[868]: (173,) ,根据已标记或未标记的数据过滤,在 174 表中具有 0 到 64 之间不等数组大小的子集。

提前致谢

解决方法

Masked Array 是您的解决方案

在许多情况下,数据集可能不完整或因存在无效数据而受到污染。例如,传感器可能未能记录数据,或记录了无效值。 numpy.ma 模块通过引入掩码数组提供了一种方便的方法来解决这个问题。

掩码数组是标准 numpy.ndarray 和掩码的组合

import numpy as np
import numpy.ma as ma

x = np.array([1,2,3,-1,5])
mx = ma.masked_array(x,mask=[0,1,0])
mx.mean() # without taking the invalid data into account

输出

2.75

以上所有内容均取自Masked array 所以你不妨从那里阅读它

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。