AttributeError: 'numpy .ndarray' объект не имеет атрибута 'insert' - PullRequest
0 голосов
/ 17 февраля 2020

Код:

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))  

Несмотря на то, что я прочитал много уроков и ответов по переполнению стека, все, что я пробую, не работает. Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Непонятно, что вы хотите создать, но если вы хотите получить список «координатных» кортежей, вот один из способов:

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)]

Повторные вызовы numpy функций, таких как np.insert и np.append, не приветствуются, поскольку они каждый раз создают новый массив. Добавление в список намного лучше - если вам приходится многократно работать так:

С 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]])
0 голосов
/ 17 февраля 2020

Замените эту строку:

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

На это:

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

Вы получите ошибку, потому что вы начали l oop с индекса 1, а 1 - это вторая позиция в Python (индексация начинается с 0). Вы не можете вставить что-то в позицию 1 в пустой массив numpy. Чтобы ваш код работал, вы должны начать свой l oop с индекса 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.])
...