python中的一个命令行,用于自动化代码

python中的一个命令行,用于自动化代码,python,function,machine-learning,Python,Function,Machine Learning,我是Python的新手。我在脑电图中使用它进行机器学习。 这是我提取“特征”的功能。 有什么办法可以改进吗?我的意思是,我不想每次需要其他范围时都改变频率。所以,在第二部分你会看到我的尝试 A部分 def computePowerBands(f, amp): return (np.mean(amp[(f >= 0.5)*(f <= 4.5)]), np.mean(amp[(f >= 4.5)*(f <= 8.5)]),

我是Python的新手。我在脑电图中使用它进行机器学习。 这是我提取“特征”的功能。 有什么办法可以改进吗?我的意思是,我不想每次需要其他范围时都改变频率。所以,在第二部分你会看到我的尝试

A部分

def computePowerBands(f, amp):
    return (np.mean(amp[(f >= 0.5)*(f <= 4.5)]),
            np.mean(amp[(f >= 4.5)*(f <= 8.5)]),
            np.mean(amp[(f >= 8.5)*(f <= 11.5)]),
            np.mean(amp[(f >= 11.5)*(f <= 15.5)]),
            np.mean(amp[(f >= 15.5)*(f <= 32.5)]) )

有什么方法可以做到这一点吗?

我不完全确定您想要实现什么,因为这确实是一块模糊的代码,但通过简单的代码重构,您可以通过成对列表对其进行参数化:

def computePowerBands(f, amp, fce):
    return [np.mean(amp[(f >= low)*(f <= up)]) for low, up in fce]
等等

或者,如果以下频带始终共享端点:

def computePowerBands(f, amp, fce):
    return [np.mean(amp[(f >= fce[fid])*(f <= fce[fid+1])])
            for fid in range(len(fce)-1)]

(f>=0.5)*(f部分B将fce中的每个值平方,并将该列表作为amp的索引提供给amp。如果amp是np向量,这将为您提供一个向量作为平均值的输入。但是,我怀疑这是否是您真正想要做的。@GarrettR还需要注意的是
bool
int
的子类
False==0
True==1
。所以y是的,
bool
s的乘法实际上是一种
,它会导致元素
0
1
amp
@Kupiakos中被访问。是的,我意识到。只是实现这一点的一种稍微模糊的方式。只是确保这是OP的意图?
computePowerBands(f, amp, [(0.5, 4.5), (4.5, 8.5)])
def computePowerBands(f, amp, fce):
    return [np.mean(amp[(f >= fce[fid])*(f <= fce[fid+1])])
            for fid in range(len(fce)-1)]
computePowerBands(f, amp, [0.5, 4.5, 8.5])