如何在numpy二维数组中添加或删除特定元素?

时间:2019-02-22 08:03:37

标签: python numpy opencv numpy-ndarray

给出以下numpy数组:

arr = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])

删除并返回:

arr = np.array([
    [1,2,3],
    [4,6],
    [7,8,9]
])

我要从此阵列中删除5。或仅删除arr [1] [2]。当我使用del arr[i][j]时,它将引发以下错误。 ValueError: cannot delete array elements和numpy文档对我来说不清楚。

类似地,如何在同一数组的某些行中添加元素?

具体来说,当我用opencv读取图像时,我得到了这个错误。

rgb_image = cv2.imread("image.png")

del操作给了我最大的错误,我无法通过np.delete(...)来实现

3 个答案:

答案 0 :(得分:1)

我认为一种方法是将np.array强制转换为列出并重复将其强制转换为np.array,如下所示:

arr = arr.tolist()
arr[1].pop(1)
arr = np.array(arr)

编辑: 似乎很正确,很麻木:

np.delete(arr, [4, 4])
np.split(arr, [3, 5, 9])

Edit2: 似乎并没有减少时间,但是您可以通过以下方式进行检查:

arr =  np.empty(3, dtype=np.object)
arr[:] = [1,2,3], [4,5,6], [7,8,9]
arr[1].remove(5)

答案 1 :(得分:1)

一个numpy数组(ndarray)是quote

  

ndarray是具有相同类型和大小的项目的(通常为固定大小)多维容器。

因此,如果要使用ndarray数据结构(及其所有优化功能),则不能有不同长度的行。

可能的解决方法是使用列表数组

>>> arr=np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9],
    []
])

(请注意要清空ndarray数据类型的空行)

因此您可以从列表之一中删除元素

>>> arr
array([list([1, 2, 3]), list([4, 5, 6]), list([7, 8, 9]), list([])],
      dtype=object)
>>> arr[1]=np.delete(arr[1], [1], axis=0)
>>> arr
array([list([1, 2, 3]), array([4, 6]), list([7, 8, 9]), list([])],
      dtype=object)

答案 2 :(得分:1)

首先使用
将数组转换为列表 new_list = list(old_array)函数。(这将创建一个数组列表)

现在,您可以执行列表的所有操作,例如 pop,filter,等,以删除所需的任何元素。

最后,当您拥有过滤列表时,可以使用

将其转换回数组

new_array = np.array(new_list)。(此新数组将保留旧数组的尺寸)