Почему мой массив выглядит как форма: (6, 1, 2), когда он состоит из двух (6,) массивов? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь импортировать данные из Excel и создать массив pos с 6 строками и двумя столбцами. Позже, когда я иду индексировать массив pos[0][1], я получаю ошибку: IndexError: index 1 is out of bounds for axis 0 with size 1.

Я посмотрел на форму моего массива, и он возвращает (6, 1, 2). Я ожидал получить (6, 2). Отдельные формы массивов, составляющие pos, это (6, ) и (6, ), которые я не очень понимаю, почему бы не (6, 1)? Не совсем понимаю разницу между ними.

irmadata   = pd.read_excel("DangerZone.xlsx")
irma_lats  = irmadata["Average Latitude"].tolist()
irma_longs = irmadata["Average Longitude"].tolist()

shipdata   = pd.read_excel("ShipPositions.xlsx")
ship_lats  = shipdata["Latitude"].to_numpy()  ## these are the (6, ) arrays
ship_longs = shipdata["Longitude"].to_numpy()
pos = np.array([[ship_lats], [ship_longs]], dtype = "d").T

extent = [-10, -90, 0, 50]
ax = plot.axes(projection = crs.PlateCarree())
ax.stock_img()
ax.add_feature(cf.COASTLINE)
ax.coastlines(resolution = "50m")
ax.set_title("Base Map")
ax.set_extent(extent)

ax.plot(irma_longs, irma_lats)
for i in range(len(ship_lats)):
    lat = pos[i][0]
    lon = pos[i][1]   ## This is where my error occurs
    ax.plot(lon, lat, 'o', label = "Ship " + str(i+1))

plot.show()

Очевидно, я мог бы просто индексировать pos[0][0][1], однако, я хотел бы знать, почему я получаю эту проблему. Я приехал из MATLAB, поэтому я полагаю, что многие мои проблемы будут связаны с различиями в том, как работает numpy и MATLAB, и, следовательно, любые советы также будут оценены!

1 Ответ

1 голос
/ 29 сентября 2019

Я решил это, я не понимал, что смогу использовать квадратные скобки для объединения двух массивов столбцов. Таким образом, изменение pos = np.array([ship_lats], [ship_longs]], dtype = "d").T на pos = np.array([ship_lats, ship_longs], dtype = "d").T сработало.

...