Ответ 1
Что именно вы пытаетесь произвести? У меня нет версии 1.7 для тестирования вашего примера.
np.array(x)
создает массив (4,)
. np.array(y)
a (4,2)
.
Как отмечено в комментарии, в 1.8.1 np.array([x, np.array(y)])
производится
ValueError: setting an array element with a sequence.
Я могу создать массив объектов dtype, состоящий из списка и массива
In [90]: np.array([x, np.array(y)],dtype=object)
Out[90]:
array([[1, 2, 3, 4],
[array([1, 2]), array([2, 3]), array([1, 2]), array([2, 3])]], dtype=object)
Я также могу объединить 2 массива, чтобы сделать массив (4,3)
(x
- это первый столбец)
In [92]: np.concatenate([np.array(x)[:,None],np.array(y)],axis=1)
Out[92]:
array([[1, 1, 2],
[2, 2, 3],
[3, 1, 2],
[4, 2, 3]])
np.column_stack([x,y])
делает то же самое.
Любопытно, что в dev 1.9 (у меня нет версии 1.9.2) она работает (вроде)
In [9]: np.__version__
Out[9]: '1.9.0.dev-Unknown'
In [10]: np.array([x,np.array(y)])
Out[10]:
array([[ 1, 2, 3, 4],
[174420780, 175084380, 16777603, 0]])
In [11]: np.array([x,np.array(y)],dtype=object)
Out[11]:
array([[1, 2, 3, 4],
[None, None, None, None]], dtype=object)
In [16]: np.array([x,y],dtype=object)
Out[16]:
array([[1, 2, 3, 4],
[[1, 2], [2, 3], [1, 2], [2, 3]]], dtype=object)
Итак, похоже, что происходит какое-то развитие.
В любом случае создание нового массива из этого списка и массива 2d неоднозначно. Используйте column_stack
(предполагая, что вы хотите получить массив 2d int).
numpy 1.9.0 примечания к выпуску:
Улучшена производительность преобразования списков, содержащих массивы в массивы с использованием np.array. Теперь она эквивалентна скорости np.vstack(list).
При транспонированном y
vstack
работает:
In [125]: np.vstack([[1,2,3,4],np.array([[1,2],[2,3],[1,2],[2,3]]).T])
Out[125]:
array([[1, 2, 3, 4],
[1, 2, 1, 2],
[2, 3, 2, 3]])
Если работал 1.7.1, а x
- имена строк, а не только ints, как в вашем примере, то, вероятно, он создавал массив объектов.