如何删除多行 NumPy 数组?

新手上路,请多包涵

如何删除多行 NumPy 数组?例如,我想删除 x 的前五行。我正在尝试以下代码:

 import numpy as np
x = np.random.rand(10, 5)
np.delete(x, (0:5), axis=0)

但它不起作用:

 np.delete(x, (0:5), axis=0)
               ^
SyntaxError: invalid syntax

原文由 vcx34178 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 873
1 个回答

有几种方法可以从 NumPy 数组中删除行。

最简单的方法是像使用标准 Python 列表一样使用 基本索引

 >>> import numpy as np
>>> x = np.arange(35).reshape(7, 5)
>>> x
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34]])
>>> result = x[5:]
>>> result
array([[25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34]])

您不仅可以选择行,还可以选择列:

 >>> x[:2, 1:4]
array([[1, 2, 3],
       [6, 7, 8]])


另一种方法是使用“ 花式索引”(使用数组索引数组):

 >>> x[[0, 2, 6]]
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [30, 31, 32, 33, 34]])

您可以使用 np.take 实现相同的目的:

 >>> np.take(x, [0, 2, 6], axis=0)
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [30, 31, 32, 33, 34]])


另一种选择是使用 np.delete 如问题所示。为了选择要删除的行/列,它可以接受 slice 对象、 int 或整数数组:

 >>> np.delete(x, slice(0, 5), axis=0)
array([[25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34]])
>>> np.delete(x, [0, 2, 3], axis=0)
array([[ 5,  6,  7,  8,  9],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34]])

但是一直以来我一直在使用 NumPy 我从来不需要这个 np.delete ,因为在这种情况下使用 布尔索引 要方便得多。

例如,如果我想删除/选择那些以大于 12 的值开头的行,我会这样做:

 >>> mask_array = x[:, 0] < 12  # comparing values of the first column
>>> mask_array
array([ True,  True,  True, False, False, False, False])
>>> x[mask_array]
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> x[~mask_array]  # ~ is an element-wise inversion
array([[15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34]])


有关更多信息,请参阅有关索引的文档: https ://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

原文由 Georgy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏