ИЗМЕНИТЬ с более подробной информацией о структуре данных. (Обратите внимание, что даже если это кажется повторяющимся вопросом, это конкретный случай преобразования массива в матрицу).
В конце приведенного ниже кода, после применения множества операций к одному и тому же набору данных, я построил окончательный трехмерный массив, преобразовав список массивов в трехмерный массив (который находится в последних строках кода, детали указаны в Комментарии).
#!/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-матрицу?
Я имею в виду простую матрицу, а не 2D-массив. Я говорю «чистая матрица», потому что, когда я запускаю код в командной строке, есть явная разница в структуре 2D-массива и матрицы. Так что я просто хочу трансформироваться.
Возможно, вам потребуется показать код и примеры, в которых вы видите эту разницу. Ваше описание неясно.
Изучив лучше, с чем у меня возникают проблемы, я обнаружил, что цель состоит в том, чтобы преобразовать 3D-массив в 2D-матрицу. Поэтому обновил весь вопрос.
Похоже на совершенно новый вопрос. Допускаются незначительные правки, но не те, которые меняют основной вопрос. Немногие, кроме меня, увидят изменения.
reshape может изменить 3d на 2d. Также рассмотрите возможность использования np.vstack в последней строке.
Это сработало, спасибо большое!






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