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

Dra*_*ght 5 python opencv numpy numpy-ndarray

给定以下 numpy 数组:

arr = np.array([
    [1,2,3],
    [4,5,6],
    [7,8,9]
])
Run Code Online (Sandbox Code Playgroud)

删除并返回:

arr = np.array([
    [1,2,3],
    [4,6],
    [7,8,9]
])
Run Code Online (Sandbox Code Playgroud)

我想从这个数组中删除 5。或仅删除 arr[1][2]。当我使用 del arr[i][j]它时会抛出以下错误。 ValueError: cannot delete array elements对我来说,这种情况下的 numpy 文档不清楚。

同样如何将元素添加到同一数组中的某些行?

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

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

del 操作给了我最大的错误,我无法做到 np.delete(...)

use*_*737 3

numpy 数组 ( ndarray) 是引用

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

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

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

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

(注意空行是为了转义 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)
Run Code Online (Sandbox Code Playgroud)