Как сделать zip двумя массивами numpy? [Дубликат]

Проблема среза в C ++ возникает из семантики значений ее объектов, которая оставалась в основном из-за совместимости с C-структурами. Вам нужно использовать явный синтаксис ссылок или указателей для достижения «нормального» поведения объекта, обнаруженного на большинстве других языков, которые выполняют объекты, т. Е. Объекты всегда передаются по ссылке.

Короткими ответами являются то, что вы нарезаете объект путем присвоения производного объекта базовому объекту значением , то есть оставшийся объект является лишь частью производного объекта. Чтобы сохранить семантику стоимости, нарезка является разумным поведением и имеет относительно редкое применение, которое не существует на большинстве других языков. Некоторые люди считают это особенностью C ++, в то время как многие считают ее одной из особенностей / недостатков C ++.

24
задан LWZ 31 July 2013 в 03:07
поделиться

2 ответа

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

>>> np.dstack((a,b))
array([[[0, 0],
        [1, 1],
        [2, 2],
        [3, 3]],

       [[4, 4],
        [5, 5],
        [6, 6],
        [7, 7]]])

Если у вас есть кортежи:

>>> np.array(zip(a.ravel(),b.ravel()), dtype=('i4,i4')).reshape(a.shape)
array([[(0, 0), (1, 1), (2, 2), (3, 3)],
       [(4, 4), (5, 5), (6, 6), (7, 7)]],
      dtype=[('f0', '<i4'), ('f1', '<i4')])

Для Python 3+ вам нужно для расширения объекта итератора zip. Обратите внимание, что это ужасно неэффективно:

>>> np.array(list(zip(a.ravel(),b.ravel())), dtype=('i4,i4')).reshape(a.shape)
array([[(0, 0), (1, 1), (2, 2), (3, 3)],
       [(4, 4), (5, 5), (6, 6), (7, 7)]],
      dtype=[('f0', '<i4'), ('f1', '<i4')])
26
ответ дан Daniel 22 August 2018 в 04:48
поделиться
  • 1
    Благодаря! dstack отлично работает для меня! – LWZ 31 July 2013 в 07:13
  • 2
    Для второй команды я получаю TypeError: a bytes-like object is required, not 'zip' - почему? – Make42 17 July 2017 в 13:59
  • 3
    @ Make42 В Python 3 zip возвращает итератор. См. Отредактированный ответ. – Daniel 18 July 2017 в 14:44
  • 4
    (В Python 3) мне не нужен вызов .ravel(). – equaeghe 28 August 2017 в 10:07
np.array([zip(x,y) for x,y in zip(a,b)])
5
ответ дан Aert 22 August 2018 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: