Преобразуйте 3D-массив в 2D-матрицу с помощью NumPy

ИЗМЕНИТЬ с более подробной информацией о структуре данных. (Обратите внимание, что даже если это кажется повторяющимся вопросом, это конкретный случай преобразования массива в матрицу).

В конце приведенного ниже кода, после применения множества операций к одному и тому же набору данных, я построил окончательный трехмерный массив, преобразовав список массивов в трехмерный массив (который находится в последних строках кода, детали указаны в Комментарии).

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import numpy as np
import glob

big_list = [] #list used to store all data built from multiple .txt files.



for a in range(1,21): #loop to open and take data from multiple .txt files.
    for s in range(1,11): 
        for e in range(1,4): 
            #specify path (with vars from loop) 
            path = '/home/user/plots/Files/a{0}_s{1}_e{2}_skeleton.txt'.format(a, s,e) 
            archive = glob.glob(path)
            #if the .txt file's opened, starts operations with data taken from it.      
            if (archive): 
                movement = np.loadtxt(path)
                num_skeletons = int(len(movement)/20)
                list_for_array = [] #list to take all data from the file.
                for i in range(num_skeletons): 
                    #list_for_array is transformed in a 2D array:
                    list_for_array.append(movement[(i*20):((i+1)*20),:3]) 
                #that same 2D array is made into a 3D array:
                coords_array= np.array(list_for_array) 


                # a 3D matrix is made from the 3D array. 
                dist_matrix = np.zeros((num_skeletons,20,20))           
                for k in range(num_skeletons):
                    for i in range(20):
                        for j in range(20):
                            dist_matrix[k,i,j] = np.linalg.norm(coords_array[k,i,:] - coords_array[k,j,:])
                    #end of the 3D matrix construction. 

                #the 3D matrix is made into a list of 2D array (each array with 1 line and 400 columns).
                for m in range(num_skeletons):

                    array = dist_matrix[m].reshape((1,400))
                    #the m 2D arrays are added to a list: 
                    big_list.append(array)
                #dist_matrix = None 

#now, big_list has all the data from all .txt files (many 2D arrays).
big_array = np.array(big_list) #and finally, big_list is made into a 3D array, or, an array made of many 2D arrays.

Я не объяснил, в чем заключается глубокий смысл кода, потому что это займет слишком много времени, а цель здесь - узнать:

Как я мог преобразовать этот окончательный 3D-массив (big_array) в 2D-матрицу?

По вашему мнению, что такое «чистая матрица»? Какая-то математическая идея? MATLAB-подобный объект?

hpaulj 03.09.2018 18:48

Я имею в виду простую матрицу, а не 2D-массив. Я говорю «чистая матрица», потому что, когда я запускаю код в командной строке, есть явная разница в структуре 2D-массива и матрицы. Так что я просто хочу трансформироваться.

E. AMARAL 03.09.2018 21:09

Возможно, вам потребуется показать код и примеры, в которых вы видите эту разницу. Ваше описание неясно.

hpaulj 03.09.2018 21:36

Изучив лучше, с чем у меня возникают проблемы, я обнаружил, что цель состоит в том, чтобы преобразовать 3D-массив в 2D-матрицу. Поэтому обновил весь вопрос.

E. AMARAL 05.09.2018 17:01

Похоже на совершенно новый вопрос. Допускаются незначительные правки, но не те, которые меняют основной вопрос. Немногие, кроме меня, увидят изменения.

hpaulj 05.09.2018 17:19
reshape может изменить 3d на 2d. Также рассмотрите возможность использования np.vstack в последней строке.
hpaulj 05.09.2018 17:22

Это сработало, спасибо большое!

E. AMARAL 05.09.2018 18:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
7
77
0

Другие вопросы по теме