【发布时间】:2021-03-31 17:48:55
【问题描述】:
我有一个名为DATA 的数据集,它从N=173 各个形状(4, 4, 64) 的文件中重新组合了几个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)
但是由于我在最后使用了这种技术,所以我有一个一维数组,并且初始数据集的所有结构都丢失了。一种技术是使用用于numpy.array 的reshape 函数,但这种技术只有在最后尺寸保持不变时才有效。在布尔条件导致可变大小的表格的情况下,我们不再可以预测并要求重塑。那么有没有办法过滤数据,但保持数据的全局形状,其大小可能会因数据中使用的标志而异?
这是一个最小的例子:
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 之间的子集取决于已标记或未标记的数据过滤。
提前谢谢你
【问题讨论】:
-
在 nD 张量上,您可以消除整个 n-1 D 切片,但不能消除各处的随机部分。例如,在 2D 中,您可以消除整列或整行,但不能消除孤立的元素。在 3D 中,您可以消除整个平面(xy、yz 或 zx),但不能消除孤立的 1D 列。你想做的那种切片会创建参差不齐的数组(“在你的 4D 张量中打洞”),因此是不可行的。但是,根据当前的答案,
numpy正是针对这种情况的“屏蔽数组”。
标签: python arrays python-3.x dataframe numpy-ndarray