【问题标题】:removing entire row containing a Nan value in a multidimensional numpy array在多维 numpy 数组中删除包含 Nan 值的整行
【发布时间】:2018-03-07 17:02:17
【问题描述】:

我在 python 中有两个 numpy 数组,特征数组(4D)和标签数组(1D)。特征数组包含 Nan 值。我想删除包含 Nan 值(在 features 数组中)及其相应标签的整行。 X 是特征数组,Y 是标签数组。 我在 python 中使用 isnan 函数作为

x=x[~np.any(np.isnan(x), axis=3)]

当我输入axis=1 时出现错误

IndexError: index 5 is out of bounds for axis 1 with size 5

当我按代码所示输入 3 时,代码运行时没有错误,当我检查输出数组时,它不再具有 Nan 值,但数组的前三个维度被折叠成二维数组。 任何帮助将不胜感激。 让我们说这一行:

[[[[  1.70204959   1.52199801   1.90457233 ...,   1.93644699   1.88296615
  2.19928936],[1.52334234 1.338273......Nan 2.23324432]]]].

如果该行包含非值,则应删除整行(不仅仅是 Nan 值),因此在此示例中我们应该保留:

[[[[  1.70204959   1.52199801   1.90457233 ...,   1.93644699   1.88296615
  2.19928936]]]] 

仅限。被移除行的对应标签也会被移除。

【问题讨论】:

  • 整行是什么意思?对我来说,行和列是 2D 数组中存在的概念,但我在 4D 数组中看不到它们。你有例子吗?
  • 您需要更详细地解释在 4D 数组案例中删除一行是什么意思。一个示例案例可能会帮助您传达信息。
  • 我认为,如果您使用 3D minimal 样本数据并向我们展示预期的输出,这将是有意义的。另外,请使用edit 链接将这些详细信息添加到问题中,而不是放入不可读的 cmets。
  • @dm5 请更新您的问题(通过使用 edit 链接)而不是在 cmets 中提供额外信息。
  • 让我向您推荐一些可用于创建示例数据的方法:x = np.random.rand(2,3,2,3),然后假设我们随机选择 NaNx[0,2,1,2] = np.nan。现在,如果你能告诉我们x 和预期的输出,那可能有助于我们理解这个问题。

标签: python numpy


【解决方案1】:

如果我对您的理解正确,那么您试图实现的目标是 - 遗憾的是 - 通常是不可能的。

假设您有一个 10x10x10 的立方体,想要删除 3 行,每行 10 个元素。这将为您留下 97 行,并且由于 97 是素数,因此现在可以将非行维度扁平化为一个。

既然很明显这种事情可以发生在 4d 或任何更高的维度,那就或多或少。

作为一般规则,您只能在掩码为 1d 的情况下保留 ndim,即,如果您要删除 ndim-1 大小的子空间。

features = np.random.random((10,9,8,7))
features[features<0.002] = np.nan
mask = np.any(np.isnan(features), axis = (0,2,3))
features[:, ~mask, ...].shape
# (10, 4, 8, 7)

如您所见,为了保持 4 个暗度,您必须沿 3 轴减少。 (0,2,3) 在这个例子中。此列表中未出现的轴(在本例中为 (1))是将被缩短的轴。

哪个轴将被缩短是您的选择,只需调用 any 与所有剩余的轴来创建适当的蒙版。

【讨论】:

  • 在将尺寸从 4D 重塑为 2D 后,我能够做到这一点,但如果我能在 4D 中做到这一点,那就太好了
  • 嗨 @dm5 我已经描述了一些我认为是保持 4d 的唯一方法。
【解决方案2】:

我知道 x.shape(1,1,m,n) 。可以通过valid=~any(np.isnan(x),3) 来做到这一点:

x[:,:,valid.squeeze()]

保留4D,或

x[valid].reshape(1,1,-1,x.shape[3])

重建它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多