Как правильно преобразовать массив больших измерений в два отдельных назначения? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь преобразовать массив форм (1, 400) в (20, 20) с массивами numpy и пытаюсь найти правильный синтаксис.

Примите во внимание следующее:

import numpy as np

d_array = np.ones((1 + 10 * (20 + 1), 1 + 10 * (20 + 1)))

# tA and tB have shape (20,)
tA = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
tB = np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

# X is a matrix of shape (5000, 400)
X = np.loadtxt(open("X.csv", "rb"), delimiter=",", skiprows=0)

Попытка назначить и изменить форму одновременно не похоже на то, как я это делаю (ниже) . Я не уверен в правильном синтаксисе для этого типа операции. Пожалуйста, помогите мне понять, что я здесь делаю неправильно.

Выдает ошибку: массив значений формы (20,20) не может быть передан для индексации результата формы (20,)

# save an array of first row from sample data of shape(1, 400)
xA = np.array([X[0, :]])

# try to assign both tA of shape(20,) and tB of shape(20,)
# a reshaped version of xA (20x20 = 400)
d_array [tA, tB] = np.reshape(xA, (20, 20))

Я просто пытаюсь создать 20 измененных массивов, содержащих 20 индексов каждого массива (20x20) = 400. Я новичок в NumPy, но я рад узнать больше. Спасибо за любую помощь, которую может предоставить любой!

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Вы можете использовать np.ix_:

d_array [np.ix_(tA, tB)] = np.reshape(xA, (20, 20))

Индексирование с двумя одномерными массивами одинаковой длины возвращает или назначает одномерный массив одинаковой длины, а именно [d_array[tA[0],tB[0]],d_array[tA[1],tB[1]],...]. Если вместо этого вам нужен продукт, вам нужно изменить форму tA и tB так, чтобы они транслировались вместе, чтобы сформировать двумерную сетку. Это может быть вручную или - более удобно - используя np.ix_

0 голосов
/ 30 октября 2019

Вы можете использовать:

d_array[tA.reshape(-1, 1), tB] = np.reshape(xA, (20, 20))

Я думаю этот вопрос также относится к вашему делу.

...