编辑,其中包含有关数据结构的更多详细信息。 (请注意,即使这似乎是一个重复的问题,这也是从数组到矩阵转换的特殊情况。)
在下面的代码末尾,对同一组数据执行了许多操作之后,我通过将数组列表转换为3D数组来构建了最终的3D数组(位于代码的最后几行,注释中指定的详细信息。)
#!/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矩阵?