如何在每个for循环中向数组添加新行,以便在python中创建矩阵(m,n)?

如何在每个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

我正在从信号数据库中创建特征矩阵

我想计算一些特征,以得到一个矩阵。每行对应于每个信号,4列对应于每个评估特征

我已经搜索过了,但我不知道如何在评估特性时,为每个信号、每个for循环正确插入或添加一行具有特性的新行

这是我遵循的代码:

.mat文件已附加到此链接

这将创建一个列表,如下所示:

这很不方便,因为我需要一个形状为(n,4)的数组,即n=a(信号数)

这是期望的结果:

总之,

-如何将计算列表创建为大小为(n,5)的float64数组?

-如何替换此行
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]])