如何在每个for循环中向数组添加新行,以便在python中创建矩阵(m,n)?
我正在从信号数据库中创建特征矩阵 我想计算一些特征,以得到一个矩阵。每行对应于每个信号,4列对应于每个评估特征 我已经搜索过了,但我不知道如何在评估特性时,为每个信号、每个for循环正确插入或添加一行具有特性的新行 这是我遵循的代码: .mat文件已附加到此链接 这将创建一个列表,如下所示: 这很不方便,因为我需要一个形状为(n,4)的数组,即n=a(信号数) 这是期望的结果: 总之, -如何将计算列表创建为大小为(n,5)的float64数组? -如何替换此行如何在每个for循环中向数组添加新行,以便在python中创建矩阵(m,n)?,python,arrays,list,numpy,matrix,Python,Arrays,List,Numpy,Matrix,我正在从信号数据库中创建特征矩阵 我想计算一些特征,以得到一个矩阵。每行对应于每个信号,4列对应于每个评估特征 我已经搜索过了,但我不知道如何在评估特性时,为每个信号、每个for循环正确插入或添加一行具有特性的新行 这是我遵循的代码: .mat文件已附加到此链接 这将创建一个列表,如下所示: 这很不方便,因为我需要一个形状为(n,4)的数组,即n=a(信号数) 这是期望的结果: 总之, -如何将计算列表创建为大小为(n,5)的float64数组? -如何替换此行calc.append(fun
calc.append(function(signal))
以将每一行添加到对应于每个for循环的评估特征数组中?
-或者正确添加每行的最有效方法是什么?
*
*
*
*
*
PD:如果我尝试这种转换,它不起作用,会给我一个非常奇怪的float64数组,大小为(9,1,4)只需创建一个空数组
features\u mat
,并通过迭代所有信号用你的特征填充它:
import numpy as np
import scipy.io as sio
mat = sio.loadmat('signal_1.mat')
# number of signals in .mat file
n = mat['signal_1'].shape[0]
# get the signals
signals = mat['signal_1'][:,0]
def get_features(signal):
mu = np.mean(signal)
mini = np.min(signal)
maxi = np.max(signal)
ran = maxi-mini
return np.array([mu,mini,maxi,ran])
# pre-allocate memory without initializing it
features_mat = np.empty((n,4))
for i, signal in enumerate(signals):
features_mat[i,:] = get_features(signal)
>>> np.array([[ 4.07850385e+00, -2.10251071e-01, 7.06541344e+00, 7.27566451e+00],
[ 8.31759999e-02, -2.61125020e-03, 1.50838105e-01, 1.53449355e-01],
[-5.55470935e+00, -5.81185396e+00, -5.17208787e+00, 6.39766089e-01],
[-1.36478103e+01, -1.46263278e+02, 1.46379425e+02, 2.92642704e+02],
[ 3.22094459e+00, 1.00760787e+00, 5.55007608e+00, 4.54246820e+00],
[ 4.36753757e+01, 3.57114093e+01, 4.93010863e+01, 1.35896770e+01],
[ 1.71242787e+00, -2.25392323e-01, 3.59933423e+00, 3.82472655e+00],
[-1.73530851e+00, -2.00324815e+00, -1.35313746e+00, 6.50110688e-01],
[-5.83099184e+00, -6.98125270e+00, -4.75522063e+00, 2.22603207e+00]])
输出具有所需的形状,并且似乎包含您要查找的功能。告诉我这是否有效
希望这有帮助
import numpy as np
import scipy.io as sio
mat = sio.loadmat('signal_1.mat')
# number of signals in .mat file
n = mat['signal_1'].shape[0]
# get the signals
signals = mat['signal_1'][:,0]
def get_features(signal):
mu = np.mean(signal)
mini = np.min(signal)
maxi = np.max(signal)
ran = maxi-mini
return np.array([mu,mini,maxi,ran])
# pre-allocate memory without initializing it
features_mat = np.empty((n,4))
for i, signal in enumerate(signals):
features_mat[i,:] = get_features(signal)
>>> np.array([[ 4.07850385e+00, -2.10251071e-01, 7.06541344e+00, 7.27566451e+00],
[ 8.31759999e-02, -2.61125020e-03, 1.50838105e-01, 1.53449355e-01],
[-5.55470935e+00, -5.81185396e+00, -5.17208787e+00, 6.39766089e-01],
[-1.36478103e+01, -1.46263278e+02, 1.46379425e+02, 2.92642704e+02],
[ 3.22094459e+00, 1.00760787e+00, 5.55007608e+00, 4.54246820e+00],
[ 4.36753757e+01, 3.57114093e+01, 4.93010863e+01, 1.35896770e+01],
[ 1.71242787e+00, -2.25392323e-01, 3.59933423e+00, 3.82472655e+00],
[-1.73530851e+00, -2.00324815e+00, -1.35313746e+00, 6.50110688e-01],
[-5.83099184e+00, -6.98125270e+00, -4.75522063e+00, 2.22603207e+00]])