从 python 中的 .mat 文件访问指定的列
Access specified columns from .mat file in python
我总共有 61225 个矩阵,每个矩阵具有相同的变量名和不同的数据。我只对变量名称为 Pose_Para
的文件感兴趣,这是一个 1x7
文件,我只对其中的第 2、3 和 4 列感兴趣。我的问题是如何只访问这些列以获得大小为 [61225 x 3]
?
的矩阵
这是我到目前为止所做的。
import glob
from scipy.io import loadmat
entries = glob.glob('300W_LP/*/*.mat', recursive=True)
print(len(entries))
for entry in entries:
para = loadmat(entry, variable_names = ("Pose_Para",))["Pose_Para"]
我假设 para = loadmat(entry, variable_names = ("Pose_Para",))["Pose_Para"]
导致 para
成为一个 7 元素的 numpy 数组。如果是这样,您可以这样做:
import numpy as np
# ...file handling...
allparas = np.empty((len(entries),3))
for ctr,entry in enumerate(entries):
allparas[ctr,:] = loadmat(entry, variable_names = ("Pose_Para",))["Pose_Para"][1:3]
请注意,您可能需要将 squeeze_me = True
添加到 loadmat
调用中。我不确定 loadmat
是否需要它来生成 7 元素一维 Numpy 数组而不是 1x7 二维数组。
您还可以使用列表理解将 for 循环编写为单行代码:
allparas = np.array([loadmat(entry, variable_names= ("Pose_Para",))["Pose_Para"][1:3] for entry in entries])
我总共有 61225 个矩阵,每个矩阵具有相同的变量名和不同的数据。我只对变量名称为 Pose_Para
的文件感兴趣,这是一个 1x7
文件,我只对其中的第 2、3 和 4 列感兴趣。我的问题是如何只访问这些列以获得大小为 [61225 x 3]
?
这是我到目前为止所做的。
import glob
from scipy.io import loadmat
entries = glob.glob('300W_LP/*/*.mat', recursive=True)
print(len(entries))
for entry in entries:
para = loadmat(entry, variable_names = ("Pose_Para",))["Pose_Para"]
我假设 para = loadmat(entry, variable_names = ("Pose_Para",))["Pose_Para"]
导致 para
成为一个 7 元素的 numpy 数组。如果是这样,您可以这样做:
import numpy as np
# ...file handling...
allparas = np.empty((len(entries),3))
for ctr,entry in enumerate(entries):
allparas[ctr,:] = loadmat(entry, variable_names = ("Pose_Para",))["Pose_Para"][1:3]
请注意,您可能需要将 squeeze_me = True
添加到 loadmat
调用中。我不确定 loadmat
是否需要它来生成 7 元素一维 Numpy 数组而不是 1x7 二维数组。
您还可以使用列表理解将 for 循环编写为单行代码:
allparas = np.array([loadmat(entry, variable_names= ("Pose_Para",))["Pose_Para"][1:3] for entry in entries])