布尔索引筛选后对数据进行整形



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

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

具有以下形状:

np.shape(DATA)
Out[854]: (173, 4, 4, 64)
np.shape(cond)
Out[855]: (173, 4, 64)

但由于我在最后使用了这种技术,所以我有一个1D数组,并且初始DATA集的所有结构都丢失了。一种技术是使用用于numpy.arrayreshape函数,但这种技术只有在结束时维度保持不变时才有效。在布尔条件导致可变大小的表的情况下,我们不再能够预测和要求重塑。那么,有没有一种方法可以过滤数据,但保持数据的全局形状,其大小可能因数据中使用的标志而异?

这里有一个最小的例子:

TEST = np.ones((173,4,4,64))
FLAG = np.random.choice(a=[False, True], size=(173,4,64))
cond = FLAG==False
data = TEST[:,0,:,:][cond]

输出:

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

预期输出:

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

在例如data[:,1,:]的情况下,根据已标记或未标记的数据过滤,在174表中具有在0和64之间的非相等数组大小的子集。

提前感谢

掩蔽阵列是您的解决方案

在许多情况下,数据集可能是不完整的,或者由于存在无效数据而受到污染。例如,传感器可能未能记录数据,或记录了无效值。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, 0, 0, 1, 0])
mx.mean() # without taking the invalid data into account

输出

2.75

以上均取自Masked数组所以你不妨从那里读一下

相关内容

  • 没有找到相关文章

最新更新