【发布时间】:2017-09-08 08:46:09
【问题描述】:
我正在尝试删除numpy.ndarray (type = class numpy.ndarray) 中行和列中的最后一项。我的数组有 30 行和 180 列(即每行 180 个值)。我试过numpy.delete,但这只是删除了整行/列。
为了说明我想要实现的目标,我在 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' 对象不支持删除项目
谢谢
更新:
我正在从网格 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
【问题讨论】:
-
它对我有用。不要使用关键字作为变量名。
list是 Python 的关键字 -
对于一个参差不齐的数组,你怎么会有行和列?
-
@VivekSable 见主帖更新
-
在更新的示例中,您可以使用
c = c[:-1, :-1]“删除”最后一列和最后一行。不过,我不明白您在另一个示例中想要什么,使用 dtypeobject的数组。 -
在您的第二个示例中,您的数组具有形状 (30,180)。当通过它循环两次时,你最终得到一个 int,而不是一个数组。所以调用 del i[-1] 是行不通的。
标签: python arrays numpy for-loop del