#python #arrays #python-3.x #numpy
#питон #массивы #python-3.x #тупица
Вопрос:
У меня есть два массива следующим образом:
a=np.vstack([np.loadtxt(path, dtype='float') for path in glob.iglob(r'E:/PostDoc/720/*.txt')]) b=np.vstack([np.loadtxt(path, dtype='float') for path in glob.iglob(r'E:/PostDoc/1080/*.txt')])
a
и b
-это два массива с размером (640,6)
теперь я определяю 3D массив следующим образом:
c = [[[0 for col in range(6)]for row in range(len(psnr_bitrate_1080))] for x in range(2)]
и я хочу поместить a и b в c, и для этого я использую следующий код:
c[:][:][0]=a c[:][:][1]=b
но он ничего не делает, и все значения in c
по-прежнему равны нулю, и он не заменяет значения in c
на a
«и b
«. вы знаете, в чем проблема? строки и столбцы в c
этом списке являются списками, a
а b
также массивами. Я пытаюсь создать 3D-массив со значениями a
и b
. Я не знаю, почему это нельзя сделать правильно. пожалуйста, скажите мне, как я могу это сделать. Спасибо.
Комментарии:
1. Что
[:]
происходит? Не ваше намерение; на самом деле делаете? Почему нет[:,:,0]
?2. да, верно. поскольку я новичок в python, я не очень хорошо знаком с синтаксисом. делая это, он работает. Я использую это c=np.нули((len(a),2,6)) c [:, 0,:] = a c [:, 1,:] = b Спасибо
Ответ №1:
Если вы хотите «сложить» два 2-D массива, то наиболее интуитивно понятным методом является использование dstack:
c = np.dstack((a, b))
Таким образом, вам даже не нужно будет создавать какой-либо пустой массив раньше.
Но если вы хотите сложить оба исходных массива «вдоль другой оси» (как я вижу из вашего комментария), запустите, например:
c2 = np.swapaxes(c, 1, 2)
Затем c2[:,0,:]
вернет ваш первый исходный массив.