删除所有行和列中的最后一项 numpy.ndarray
delete last item in all rows and columns numpy.ndarray
我正在尝试删除 numpy.ndarray
(type = class numpy.ndarray
) 中行和列中的最后一项。我的数组有 30 行和 180 列(即每行 180 个值)。我试过 numpy.delete
但这只是删除了整个 row/column.
为了说明我想要实现的目标,我在 Python 中使用数组和嵌套 for 循环创建了以下示例:
a = np.array([[[1,2,3,4,5,6],[1,2,3,4],[1,2,3,4]],[[1,2,3,4,5,6],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]]])
for list in a:
for sublist in list:
del sublist[-1]
正在使用
print(a)
给出以下数组:
[[[1, 2, 3, 4, 5, 6], [1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4, 5, 6], [1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4]]
[[1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4]]]
正在使用
print(list)
for 循环后给出:
[[1, 2, 3, 4, 5], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3, 4, 5], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
不幸的是,在我的阵列上使用它会出现以下错误:
TypeError: 'numpy.float64' object does not support item deletion
谢谢
更新:
我正在从网格 NetCDF 文件中提取我的信息。我已将 list
一词更改为 l
,因为 list
是一个 Python 关键字。这对我来说并没有改变。
这为我的数组提供了一个很好的例子:
c = np.arange(5400).reshape(30,180)
for l in c:
for i in l:
del i[-1]
当我 运行 此代码时,出现以下错误:
Traceback (most recent call last): File "main.py", line 18, in <module>
del i[-1]
TypeError: 'numpy.int64' object does not support item deletion
del i[-1]
是一个列表操作。 np.array
不支持。
Count the occurrences of a specific value and remove them at the same time 演示列表和数组在删除方面的区别。
你的例子a
是对象数据类型,包含列表
In [111]: a.shape
Out[111]: (11,)
In [112]: [len(i) for i in a]
Out[112]: [3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2]
In [113]: a[0]
Out[113]: [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4], [1, 2, 3, 4]]
a[0]
是一个 3 元素列表,具有不同长度的子列表。
不清楚您要删除的内容。从 a
中删除元素,或从 a
的每个元素中删除元素,或从这些元素的子列表中删除元素。
此外,如果真实数据来自NetCDF
,它实际上可能是一个多维数组。或者如果是对象 dtype,元素本身可能是 (2d) 数组。
以防万一,切片是从数组中删除 rows/columns 的正确方法:
In [114]: a = np.arange(12).reshape(3,4)
In [115]: a
Out[115]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [116]: a[:-1, :-1]
Out[116]:
array([[0, 1, 2],
[4, 5, 6]])
结果是view
;它不会改变 a
本身。 a = a[:-1, :-1].copy()
是在不保留任何原始数组的情况下创建缩小数组的最简洁方法。
我正在尝试删除 numpy.ndarray
(type = class numpy.ndarray
) 中行和列中的最后一项。我的数组有 30 行和 180 列(即每行 180 个值)。我试过 numpy.delete
但这只是删除了整个 row/column.
为了说明我想要实现的目标,我在 Python 中使用数组和嵌套 for 循环创建了以下示例:
a = np.array([[[1,2,3,4,5,6],[1,2,3,4],[1,2,3,4]],[[1,2,3,4,5,6],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]],[[1,2,3,4],[1,2,3,4]]])
for list in a:
for sublist in list:
del sublist[-1]
正在使用
print(a)
给出以下数组:
[[[1, 2, 3, 4, 5, 6], [1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4]] [[1, 2, 3, 4], [1, 2, 3, 4]]]
正在使用
print(list)
for 循环后给出:
[[1, 2, 3, 4, 5], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3, 4, 5], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
[[1, 2, 3], [1, 2, 3]]
不幸的是,在我的阵列上使用它会出现以下错误:
TypeError: 'numpy.float64' object does not support item deletion
谢谢
更新:
我正在从网格 NetCDF 文件中提取我的信息。我已将 list
一词更改为 l
,因为 list
是一个 Python 关键字。这对我来说并没有改变。
这为我的数组提供了一个很好的例子:
c = np.arange(5400).reshape(30,180)
for l in c:
for i in l:
del i[-1]
当我 运行 此代码时,出现以下错误:
Traceback (most recent call last): File "main.py", line 18, in <module>
del i[-1]
TypeError: 'numpy.int64' object does not support item deletion
del i[-1]
是一个列表操作。 np.array
不支持。
Count the occurrences of a specific value and remove them at the same time 演示列表和数组在删除方面的区别。
你的例子a
是对象数据类型,包含列表
In [111]: a.shape
Out[111]: (11,)
In [112]: [len(i) for i in a]
Out[112]: [3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2]
In [113]: a[0]
Out[113]: [[1, 2, 3, 4, 5, 6], [1, 2, 3, 4], [1, 2, 3, 4]]
a[0]
是一个 3 元素列表,具有不同长度的子列表。
不清楚您要删除的内容。从 a
中删除元素,或从 a
的每个元素中删除元素,或从这些元素的子列表中删除元素。
此外,如果真实数据来自NetCDF
,它实际上可能是一个多维数组。或者如果是对象 dtype,元素本身可能是 (2d) 数组。
以防万一,切片是从数组中删除 rows/columns 的正确方法:
In [114]: a = np.arange(12).reshape(3,4)
In [115]: a
Out[115]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [116]: a[:-1, :-1]
Out[116]:
array([[0, 1, 2],
[4, 5, 6]])
结果是view
;它不会改变 a
本身。 a = a[:-1, :-1].copy()
是在不保留任何原始数组的情况下创建缩小数组的最简洁方法。