Ваш вход представляет собой список кортежей, каждый набор состоит из числа и массива. По какой-то причине вы хотите выбросить число и просто объединить массивы в более крупный массив - это правильно?
In [1067]: x=[(1.2840277121727839, np.array([-0.6778734, -0.73517866])),
(0.049083398938327472, np.array([-0.73517866, 0.6778734 ]))]
In [1068]: x
Out[1068]:
[(1.2840277121727839, array([-0.6778734 , -0.73517866])),
(0.04908339893832747, array([-0.73517866, 0.6778734 ]))]
список понимание делает хорошую работу извлечения нужных элементов для кортежей:
In [1069]: [y[1] for y in x]
Out[1069]: [array([-0.6778734 , -0.73517866]), array([-0.73517866, 0.6778734 ])]
vstack
и отлично подходит для объединения массивов в большую.
In [1070]: np.vstack([y[1] for y in x])
Out[1070]:
array([[-0.6778734 , -0.73517866],
[-0.73517866, 0.6778734 ]])
vstack
просто concatenate
с дополнительным шагом, который обеспечивает входы 2d.
np.array([y[1] for y in x])
также работает, так как вы добавляете измерение.
Я предполагаю, что у array([-0.6778734, -0.73517866], [-0.73517866, 0.6778734])
есть опечатка - что ей не хватает []
. Второй параметр - np.array
- это dtype, а не другой список.
Обратите внимание, что как np.array
, так и np.concatentate
взять список. Это может быть список списков или список массивов. Это не имеет большого значения. И на этом этапе не беспокойтесь о вычислительной эффективности. Каждый раз, когда вы объединяете данные из 2 или более массивов, будет выполняться копирование. Массивы имеют фиксированный размер и не могут «расти» без создания новой копии.
In [1074]: np.concatenate([y[1] for y in x]).reshape(2,2)
Out[1074]:
array([[-0.6778734 , -0.73517866],
[-0.73517866, 0.6778734 ]])
Списки эффективно 1d, так что np.concatenate
присоединяется к ним на этом измерении, производя 1d массив 4 элемента. reshape
исправляет это. vstack
делает их как (1,2)
, так и делает конкатенацию на 1-м измерении.
Другое выражение, которое объединяет массивы в новом измерении:
np.concatenate([y[1][None,...] for y in x], axis=0)
[None,...]
добавляет новое измерение в самом начале.
Вы имеете в виду 2-мерный массив? – Dunes
Ну, размер n x n или n x k - это то, что я собираюсь сделать, я использовал 2 x 2 в качестве простого примера, чтобы сократить время вычислений для остальной части моего алгоритма на этапе прототипирования. – MrYeerk
Думаю, вопрос @Dunes возникает из-за невозможности вашего желаемого результата. Я думаю, что вам не хватает дополнительной пары фигурных скобок, которая сделала бы это двухмерным массивом: 'array ([[- 0.6778734, -0.73517866], [-0.73517866, 0.6778734]])' –