簡體   English   中英

AttributeError: 'numpy.ndarray' 對象沒有屬性 'insert'

[英]AttributeError: 'numpy.ndarray' object has no attribute 'insert'

代碼:

import numpy as np

coordinates = np.array([])

for x in range(1, 9):
  for y in range(1, 9):
    coordinates = coordinates.insert(coordinates, (x,y))  

盡管閱讀了許多教程和 Stack Overflow 的回復,但我嘗試的一切都不起作用。 有人可以幫忙嗎?

替換這一行:

coordinates = coordinates.insert(coordinates, (x,y))

有了這個:

coordinates = np.insert(coordinates, x,y)

您將收到錯誤,因為您從索引 1 開始循環,而 1 是 Python 中的第二個位置(索引從 0 開始)。 您不能在空的numpy數組中的位置 1 處插入內容。 要使您的代碼正常工作,您必須在索引 0 處開始循環:

import numpy as np

coordinates = np.array([])

for x in range(0, 9):
  for y in range(0, 9):
    coordinates = np.insert(coordinates, x, y)
Out[10]: 
array([8., 8., 8., 8., 8., 8., 8., 8., 8., 7., 6., 5., 4., 3., 2., 1., 0.,
       7., 6., 5., 4., 3., 2., 1., 0., 7., 6., 5., 4., 3., 2., 1., 0., 7.,
       6., 5., 4., 3., 2., 1., 0., 7., 6., 5., 4., 3., 2., 1., 0., 7., 6.,
       5., 4., 3., 2., 1., 0., 7., 6., 5., 4., 3., 2., 1., 0., 7., 6., 5.,
       4., 3., 2., 1., 0., 7., 6., 5., 4., 3., 2., 1., 0.])

不清楚你想產生什么,但如果你想要一個“坐標”元組列表,這是一種方法:

In [310]: alist = [] 
     ...: for x in range(1,4): 
     ...:     for y in range(1,4): 
     ...:         alist.append((x,y)) 
     ...:                                                                                      
In [311]: alist                                                                                
Out[311]: [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

或作為列表理解:

In [312]: [(x,y) for x in range(1,4) for y in range(1,4)]                                      
Out[312]: [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

不鼓勵重復調用像np.insertnp.append這樣的numpy函數,因為它們每次都會創建一個全新的數組。 列表附加要好得多 - 如果您必須像這樣重復工作。

使用numpy使用類似meshgrid東西來生成“坐標”

In [319]: np.meshgrid(range(1,4),range(1,4))                                                   
Out[319]: 
[array([[1, 2, 3],
        [1, 2, 3],
        [1, 2, 3]]), array([[1, 1, 1],
        [2, 2, 2],
        [3, 3, 3]])]
In [320]: np.reshape(_,(-1,2))      # rearrange into (n,2) array                                                           
Out[320]: 
array([[1, 2],
       [3, 1],
       [2, 3],
       [1, 2],
       [3, 1],
       [1, 1],
       [2, 2],
       [2, 3],
       [3, 3]])

暫無
暫無

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

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