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

给定以下 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(...)


呼唤远方
浏览 721回答 3
3回答

慕姐4208626

一个 numpy 数组 ( ndarray) 是引用:一个 ndarray 是一个(通常是固定大小的)相同类型和大小的项目的多维容器。因此,如果要使用ndarray数据结构(及其所有优化),则不能有不同长度的行。一个可能的解决方法是拥有一个列表数组>>> arr=np.array([    [1,2,3],    [4,5,6],    [7,8,9],    []])(注意要转义 ndarray 数据类型的空行)这样您就可以从其中一个列表中删除一个元素>>> arrarray([list([1, 2, 3]), list([4, 5, 6]), list([7, 8, 9]), list([])],      dtype=object)>>> arr[1]=np.delete(arr[1], [1], axis=0)>>> arrarray([list([1, 2, 3]), array([4, 6]), list([7, 8, 9]), list([])],      dtype=object)

凤凰求蛊

我认为一种方法是将 np.array 转换为 list 并重复转换为 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)

哆啦的时光机

首先使用new_list = list(old_array)函数将数组转换为列表。(这将创建一个数组列表)现在,您可以执行列表的所有操作,如弹出、过滤器等,以删除您想要的任何元素。最后,当你有你的过滤列表时,使用new_array = np.array(new_list) .(这个新数组将保留旧数组的维度)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python