如何解决布尔索引过滤后重塑数据
我有一个名为 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 举报,一经查实,本站将立刻删除。