簡體   English   中英

刪除所有行和列numpy.ndarray中的最后一項

[英]delete last item in all rows and columns numpy.ndarray

我正在嘗試刪除numpy.ndarray的行和列中的最后一項( type = class numpy.ndarray )。 我的數組有30行和180列(即每行180個值)。 我已經嘗試過numpy.delete但這只是刪除了整個行/列。

為了說明我要實現的目標,我在Python中使用and數組創建了以下示例,並嵌套了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

del i[-1]是列表操作。 np.array不支持。

計算特定值的出現並同時將其刪除,這說明刪除列表和數組之間的區別。

您的示例a是對象dtype,包含列表

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)數組。

萬一,切片是從數組中刪除行/列的正確方法:

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()是創建尺寸減小的數組而又不保留任何原始數組的最a = a[:-1, :-1].copy()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM