布尔索引过滤后重塑数据
Reshape data after boolean indexes filtering
我有一个名为 DATA
的数据集,它从 N=173
个单独形状 (4, 4, 64)
的文件中重新组合了几个 3D table,所以最后 numpy 数组称为 DATA
的形状为 (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)
但是由于我最后使用了这种技术,所以我有一个一维数组,并且初始数据集的所有结构都丢失了。一种技术是使用用于 numpy.array
的 reshape
函数,但此技术仅在维度保持不变时才有效。在布尔条件导致 tables 可变大小的情况下,我们不再可以预测并要求重塑。那么有没有一种方法可以过滤数据,同时保持数据的全局形状,其大小可以根据数据中使用的标志而变化?
这是一个最小的例子:
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 table 中具有非等于数组大小介于 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 array
所以你不妨从那里阅读它
我有一个名为 DATA
的数据集,它从 N=173
个单独形状 (4, 4, 64)
的文件中重新组合了几个 3D table,所以最后 numpy 数组称为 DATA
的形状为 (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)
但是由于我最后使用了这种技术,所以我有一个一维数组,并且初始数据集的所有结构都丢失了。一种技术是使用用于 numpy.array
的 reshape
函数,但此技术仅在维度保持不变时才有效。在布尔条件导致 tables 可变大小的情况下,我们不再可以预测并要求重塑。那么有没有一种方法可以过滤数据,同时保持数据的全局形状,其大小可以根据数据中使用的标志而变化?
这是一个最小的例子:
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 table 中具有非等于数组大小介于 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 array 所以你不妨从那里阅读它