如何从 numpy 二维数组中添加或删除特定元素?
How to add or remove a specific element from a numpy 2d array?
给定以下 numpy 数组:
arr = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
删除并return:
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(...)
我认为一种方法是将 np.array 转换为列表并重复转换为 np.array,如下所示:
arr = arr.tolist()
arr[1].pop(1)
arr = np.array(arr)
编辑:
好像是对的,numpy的方式:
np.delete(arr, [4, 4])
np.split(arr, [3, 5, 9])
编辑2:
似乎并没有减少耗时,但你可以这样检查:
arr = np.empty(3, dtype=np.object)
arr[:] = [1,2,3], [4,5,6], [7,8,9]
arr[1].remove(5)
一个 numpy 数组 (ndarray
) 是 quote:
An ndarray is a (usually fixed-size) multidimensional container of items of the same type and size.
因此,如果您想使用 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)
首先使用
将数组转换为列表
new_list = list(old_array) 函数。(这将创建一个数组列表)
现在,您可以执行列表的所有操作,例如 pop、filter、 等,以删除您想要的任何元素。
最后,当您有了过滤列表后,使用
将其转换回数组
new_array = np.array(new_list) 。(这个新数组将保留旧数组的维度)
给定以下 numpy 数组:
arr = np.array([
[1,2,3],
[4,5,6],
[7,8,9]
])
删除并return:
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(...)
我认为一种方法是将 np.array 转换为列表并重复转换为 np.array,如下所示:
arr = arr.tolist()
arr[1].pop(1)
arr = np.array(arr)
编辑: 好像是对的,numpy的方式:
np.delete(arr, [4, 4])
np.split(arr, [3, 5, 9])
编辑2: 似乎并没有减少耗时,但你可以这样检查:
arr = np.empty(3, dtype=np.object)
arr[:] = [1,2,3], [4,5,6], [7,8,9]
arr[1].remove(5)
一个 numpy 数组 (ndarray
) 是 quote:
An ndarray is a (usually fixed-size) multidimensional container of items of the same type and size.
因此,如果您想使用 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)
首先使用
将数组转换为列表
new_list = list(old_array) 函数。(这将创建一个数组列表)
现在,您可以执行列表的所有操作,例如 pop、filter、 等,以删除您想要的任何元素。
最后,当您有了过滤列表后,使用
将其转换回数组new_array = np.array(new_list) 。(这个新数组将保留旧数组的维度)