Python: добавление к массиву numy по определенным индексам и изменение формы - PullRequest
0 голосов
/ 23 октября 2018

У меня есть такой массив:

print(pred_galactic_prob.shape)
print(pred_galactic_prob[0:3])

(465, 5)
[[0.05 0.94 0.3  0.01 0.5 ]
 [0.01 0.02 0.01 0.85 0.11]
 [0.03 0.95 0.3  0.3  0.02]]

Я хочу добавить к нему и изменить форму, чтобы было 13 столбцов, и это выглядело бы так:

[[0.05 0.   0.94 0.   0.   0.3  0.   0.   0.01 0.   0.   0.   0.5 ]
 [0.01 0.   0.02 0.   0.   0.01 0.   0.   0.85 0.   0.   0.   0.11]
 [0.03 0.   0.95 0.   0.   0.3  0.   0.   0.3  0.   0.   0.   0.02]]

то есть столбец со всеми 0. добавляется после первого столбца, два столбца со всеми 0. добавляются после второй записи и так далее, как указано выше.

Я пробовал следующее:

pred_galactic_prob2 = np.array
for i in pred_galactic_prob:
    pred_galactic_prob2 = np.append(pred_galactic_prob2, [i[0], 0.0, i[1], 0.0, 0.0, i[2], 0.0, 0.0, i[3], 0.0, 0.0, 0.0, i[4]])

но это просто превращает его в одномерный массив.

1 Ответ

0 голосов
/ 23 октября 2018

«Однолинейное» решение было бы

np.concatenate((a[:,:1],
                np.lib.stride_tricks.as_strided(0,[len(a),1],[0,0]),
                a[:,1:2],
                np.lib.stride_tricks.as_strided(0,[len(a),2],[0,0]),
                a[:,2:3],
                np.lib.stride_tricks.as_strided(0,[len(a),2],[0,0]),
                a[:,3:4],
                np.lib.stride_tricks.as_strided(0,[len(a),3],[0,0]),
                a[:,4:]), -1)

Хотя оно в любом смысле проводное.Использование append потребует еще больше as_strided с.Я считаю, что должна быть append -нишная функция, которая автоматически транслирует ввод, но я не уверен, что это такое.В любом случае, лучшее решение определенно, как упомянул @hpaulj:

b = np.zeros((len(a), 13), a.dtype)
b[:,[0,2,5,8,12]] = a

здесь a означает ввод, b означает вывод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...