как инициализировать 3D-массив с помощью двух 2D-массивов в python?

#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,:] вернет ваш первый исходный массив.