объединить два массива в дополнительный размер Python - PullRequest
0 голосов
/ 03 мая 2018

У меня есть 2 массива формы каждого (50,50,3) когда я делаю конкатенацию .... мне нужно, чтобы новое измерение было:

(2 , 50 , 50,3)

где 2 для 2 изображений Я попробовал:

np.concatenate((cat01 , cat02 ) , axis = 0)

выходы (100 , 50 , 3)

И

np.concatenate((cat01 , cat02 ) , axis = 1)

выходы (50 , 100 , 3)

Так как я могу добавить другое измерение в массив?

Ответы [ 4 ]

0 голосов
/ 03 мая 2018

Или:

np.array((cat01, cat02))

немного проще, чем

np.concatenate((cat01[None], cat02[None), 0)

и примерно так же быстро.

>>> cat01 = np.ones((50, 50, 3))
>>> cat02 = np.zeros((50, 50, 3))
>>> 
>>> from timeit import timeit
>>> kwds = dict(globals=globals(), number=100000)
>>> 
>>> timeit("np.concatenate((cat01[None], cat02[None]), 0)", **kwds)
0.7162981643341482
>>> timeit("np.array((cat01, cat02))", **kwds)
0.7192633128724992
>>> timeit("np.stack((cat01, cat02))", **kwds)
1.1847702045924962
0 голосов
/ 03 мая 2018
cat01G = cat01[np.newaxis , :,:,:]

просто добавьте np.newaxis, это решит вашу проблему

0 голосов
/ 03 мая 2018

Хотя stack удобно, но лучше понять, как использовать concatenate напрямую:

np.concatenate((cat01[None,...] , cat02[None,...] ) , axis = 0)

Другими словами - настроить размеры каждого из входных массивов. Использование None или np.newaxis должно стать тем, что вы обычно используете в numpy. Также научитесь делать то же самое с reshape.

Также попробуйте:

np.expand_dims(cat01, axis=0)
0 голосов
/ 03 мая 2018

Вы хотите это:

np.stack((cat01, cat02))

Тогда форма (2, 50, 50, 3).

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