从numpy数组中删除单个元素(不是整个行/列)

时间:2017-01-21 10:22:19

标签: python arrays numpy

有没有办法只删除2d numpy数组中的单个元素?

例如,假设我有:     x = np.array([[1, 2], [3, 4]])

我希望新版本的x只存储np.array([[1], [3, 4]])

这可行吗?

1 个答案:

答案 0 :(得分:0)

作为列表操作,这是直截了当的:

In [328]: x = np.array([[1, 2], [3, 4]])

只需使用list del删除所需的元素:

In [337]: xl=x.tolist()
In [338]: idx=(0,1)
In [339]: del xl[idx[0]][idx[1]]
In [340]: xl
Out[340]: [[1], [3, 4]]

它可以变回一个数组 - 但它会是锯齿状的,因此是一个列表数组:

In [341]: np.array(xl)
Out[341]: array([[1], [3, 4]], dtype=object)

您还可以使用np.delete从数组的展平版本中删除此元素:

In [343]: np.ravel_multi_index(idx,x.shape)
Out[343]: 1
In [344]: np.delete(x,np.ravel_multi_index(idx,x.shape))
Out[344]: array([1, 3, 4])

你不能回到2d阵列。它可以分成行数组:

In [345]: np.split(_,[1])
Out[345]: [array([1]), array([3, 4])]

在一般情况下,计算拆分索引会更乏味。