小编Ste*_*joa的帖子

从声音文件中检测频率

我想要实现的目标如下:我需要声音文件(.wav)的频率值进行分析.我知道很多程序会给出值的可视图(谱图),但我需要原始数据.我知道这可以通过FFT完成,并且应该在python中相当容易编写脚本但不确定如何完全执行它.因此,假设文件中的信号长度为.4s,那么我希望多次测量,为程序测量的每个时间点以及它找到的值(频率)(以及可能的功率(dB))提供输出作为数组.复杂的是我想分析鸟歌,它们经常有谐波或信号超出频率范围(例如1000-2000赫兹).我希望程序也能输出这些信息,因为这对于我想对数据做的分析非常重要:)

现在有一段看起来非常像我想要的代码,但我认为它并没有给我所有我想要的价值....(感谢Justin Peel将这个问题发布到另一个问题:))所以我聚集在一起我需要numpy和pyaudio但不幸的是我不熟悉python所以我希望Python专家可以帮助我吗?

源代码:

# Read in a WAV and find the freq's
import pyaudio
import wave
import numpy as np

chunk = 2048

# open up a wave
wf = wave.open('test-tones/440hz.wav', 'rb')
swidth = wf.getsampwidth()
RATE = wf.getframerate()
# use a Blackman window
window = np.blackman(chunk)
# open stream
p = pyaudio.PyAudio()
stream = p.open(format =
                p.get_format_from_width(wf.getsampwidth()),
                channels = wf.getnchannels(),
                rate = RATE,
                output = True)

# read some data
data = wf.readframes(chunk)
# play stream and find the …
Run Code Online (Sandbox Code Playgroud)

python audio numpy fft frequency

9
推荐指数
2
解决办法
2万
查看次数

我的PCA出了什么问题?

我的代码:

from numpy import *

def pca(orig_data):
    data = array(orig_data)
    data = (data - data.mean(axis=0)) / data.std(axis=0)
    u, s, v = linalg.svd(data)
    print s #should be s**2 instead!
    print v

def load_iris(path):
    lines = []
    with open(path) as input_file:
        lines = input_file.readlines()
    data = []
    for line in lines:
        cur_line = line.rstrip().split(',')
        cur_line = cur_line[:-1]
        cur_line = [float(elem) for elem in cur_line]
        data.append(array(cur_line))
    return array(data)

if __name__ == '__main__':
    data = load_iris('iris.data')
    pca(data)
Run Code Online (Sandbox Code Playgroud)

虹膜数据集:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data

输出:

[ 20.89551896 …
Run Code Online (Sandbox Code Playgroud)

python numpy machine-learning linear-algebra pca

9
推荐指数
1
解决办法
5175
查看次数

可压缩性示例

从我的算法教科书:

一年一度的县赛马比赛将引进三羽从未参加过比赛的纯种马.很兴奋,你研究他们过去的200场比赛并总结这些比赛的概率分布超过四个结果:第一("第一名"),第二名,第三名和其他.

                       Outcome     Aurora   Whirlwind    Phantasm
                        first        0.15      0.30          0.20

                        second       0.10      0.05          0.30

                        third        0.70      0.25          0.30

                        other        0.05      0.40          0.20
Run Code Online (Sandbox Code Playgroud)

哪匹马最可预测?这个问题的一个定量方法是研究可压缩性.将每匹马的历史记录为200个值(第一,第二,第三,其他)的字符串.然后可以使用霍夫曼算法计算编码这些跟踪记录串所需的总位数.这对于Aurora来说是290位,对于Whirlwind来说是380位,对于Phantasm来说是420位(检查它!).Aurora具有最短的编码,因此在强烈意义上是最可预测的.

他们是如何为Phantasm获得420的?我一直得到400字节,如下所示:

首先结合,其他= 0.4,结合第二,第三= 0.6.最终以2位编码每个位置.

有没有我对霍夫曼编码算法误解的东西?

教科书可在此处获得:http://www.cs.berkeley.edu/~vazirani/algorithms.html(第156页).

compression algorithm huffman-code information-theory

8
推荐指数
1
解决办法
308
查看次数

如何使用FFT计算数据频率?

我想知道数据的频率.我有点想到它可以使用FFT完成,但我不知道该怎么做.一旦我将整个数据传递给FFT,它就会给我2个峰值,但我怎样才能获得频率?

非常感谢提前.

algorithm signal-processing fft c#-3.0

8
推荐指数
5
解决办法
3万
查看次数

使用Python的弹性搜索进行批量更新

我正在尝试基于文档属性的状态更改进行批量更新.创建工作正常,但批量是吓坏了.我收到"脚本或文档丢失"效果的错误,但一切看起来都不错.

以下是我尝试批量更新的方法:

frequency_cleared = [
    {
        "_id": result['_id'], 
        "_type": "the-type", 
        "_index": "the-index", 
        "_source": result['_source'],
        "_op_type": 'update'
    } 
    for result in search_results['hits']['hits']
]
Run Code Online (Sandbox Code Playgroud)

我在迭代结果的原因是因为我在列表中使用了一个if理解,但是因为我能够看到结果,所以我知道这不是问题.我无法显示结果,不得不更改属性名称,因为这是我工作的公司.

这是追溯:

Elasticsearch.exceptions.RequestError: 
TransportError(400, 'action_request_validation_exception',
  'Validation Failed: 1: script or doc is missing...') 
Run Code Online (Sandbox Code Playgroud)

省略号表示它显示列表中每个元素失败的相同错误.

python elasticsearch elasticsearch-py

8
推荐指数
1
解决办法
5746
查看次数

使用uWSGI部署Pylons

我们正试图将我们的内部网移动到Pylons.我的老板正试图设置Pylons在Apache后面使用uWSGI,这样他就可以设置多个独立的应用程序.但是,他很难设置它,在uWSGI的C源代码中有一些明显的代码问题.有没有人对如何部署可能帮助我们的Pylons应用程序有任何建议?

谢谢,

道格

python apache deployment pylons uwsgi

5
推荐指数
2
解决办法
4199
查看次数

绘制多维数据

我有俱乐部成员的记录和他们的兴趣,如下所示:

Member A: Football, Swimming
Member B: Swimming, Jooga, Jogging
Member C: Cycling, Football
Member D: Football, Tennis, Cycling
Run Code Online (Sandbox Code Playgroud)

是否可以在Python中绘制这些图,以便可以看到成员共享的不同兴趣?在此先感谢,Adia

python matplotlib

5
推荐指数
1
解决办法
2106
查看次数

scipy.optimize.fmin_bfgs单个函数计算f和fprime

我正在使用scipy.optimize.fmin_bfgs(f, init_theta, fprime)最小化f,它具有渐变fprime.我计算ffprime在一个函数中,因为大多数计算是相同的,所以没有必要做两次.

有没有什么方法来调用fmin_bfgs()指定同时返回一个单一的功能ffprime

python optimization gradient scipy

5
推荐指数
1
解决办法
2160
查看次数

Numpy:将一维中的索引转换为多维

尽管数组是多维的,但许多数组方法返回单个索引.例如:

a = rand(2,3)
z = a.argmax()
Run Code Online (Sandbox Code Playgroud)

对于二维,很容易找到最大元素的矩阵索引:

a[z/3, z%3]
Run Code Online (Sandbox Code Playgroud)

但对于更多尺寸,它可能会变得烦人.在一个(折叠)维度中给定索引时,Numpy/Scipy是否有一种简单的方法可以在多个维度中返回索引?谢谢.

numpy scipy

4
推荐指数
1
解决办法
1581
查看次数

在二叉树中查找"局部最小值"

你们可以帮我解决一些我被困住的功课问题吗?

完整二叉树中的局部最小值被定义为小于其所有邻居(邻居=父,左子,右子)的节点.我需要在给定的完整二叉树中找到局部最小值,其中每个节点具有不同的数字,在O(logn)complixity时间内.

好吧,既然要求是O(logn)那么我试着想办法只通过一条路穿过树到一片叶子.或者也许每次在递归时我只能看到树的一半,这样它就会进行登录.

所以说我在树上有这个:

    70
   /  \
 77    60
Run Code Online (Sandbox Code Playgroud)

有3种情况:

1)根小于左右孩子//然后我就完成了

2)根比左边小

3)根比右边小

上述树的情况下2.因此,让我们"扔掉"左子树,因为没有办法77可以是"极小",因为它比其母公司大.所以我们留下了正确的子树.依此类推,直到找到当地的最低标准.

这里的问题是,当我们扔掉那个左子树时,我们可能会错过下面的另一个本地最小值.这是一个例子:

                70
              /    \
            77      60
          /   \    /   \
         1    8    9    14
        / \  / \  / \   / \
       3   4 5 6  2 7  15 13
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,唯一的局部最小值是"1",但是我们错过了它,因为在开始时我们决定搜索根的右子树.

binary-tree local min

4
推荐指数
2
解决办法
4404
查看次数

Python装饰器或其他重构的潜在用途:迭代优化

请原谅我关于Python装饰器的另一个问题.我读了很多,但我想知道具体的以下问题的最佳解决方案是什么.

我写了几个函数,在numpy/scipy中做某种形式的梯度下降.给定矩阵X,我尝试迭代地最小化一些距离d(X,AS),作为A和S的函数.每个算法遵循相同的基本过程,但每个算法具有不同的更新规则.例如,这是我的两个函数(注意唯一的区别在于更新规则):

def algo1(X, A=None, S=None, K=2, maxiter=10, c=0.1):
    M, N = X.shape
    if A is None:
        A = matrix(rand(M, K))
    if S is None:
        S = matrix(rand(K, N))
    for iter in range(maxiter):
        # Begin update rule.
        A = multiply(A, (X*S.T + c)/(A*S*S.T + c))
        S = multiply(S, (A.T*X + c)/(A.T*A*S + c))
        # End update rule.
        for k in range(K):
            na = norm(A[:,k])
            A[:,k] /= na
            S[k,:] *= na
    return A, S
Run Code Online (Sandbox Code Playgroud)

... 和另外一个:

def algo2(X, A=None, S=None, K=2, …
Run Code Online (Sandbox Code Playgroud)

python refactoring numpy decorator

1
推荐指数
1
解决办法
271
查看次数