小编jip*_*oe4的帖子

Pydub 按样本切片音频段

假设我有两个相同采样率的音频段,它们是从 Pydub 中的 .wav 文件导入的,并假设我知道哪个更短。现在假设我想将较长的音频文件分成两段,以便第一段与较短的音频文件具有完全相同的长度(下降到完全相同的样本数!)并将这两个段中的每一个分配给新的音频段. 我怎样才能在 Pydub 中做到这一点? 如果我不能使用 Pydub 达到这种精度水平,你能给我一个同样有效的替代方案吗?

基本上我只想在样本完美级别将较长的音频片段分成两部分。这是我想要的插图: 在此处输入图片说明

python audio sample-rate python-3.x pydub

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

列表的N个不同排列的随机样本

假设我有一个任意长度的Python列表k.现在,假设我想要随机抽样n,(其中n <= k!)该列表的不同排列.我很想尝试:

import random
import itertools

k = 6
n = 10

mylist = list(range(0, k))

j = random.sample(list(itertools.permutations(mylist)), n)

for i in j:
  print(i)
Run Code Online (Sandbox Code Playgroud)

但是,当代码太大时,这段代码自然会变得非常缓慢k.鉴于我可能正在寻找n的排列数量与排列总数相比将相对较小,因此计算所有排列是不必要的.但重要的是,最终列表中的所有排列都不是重复的.

你会如何更有效地实现这一目标?记住,mylist可能是任何事情的清单,我只是list(range(0, k))为了简单而使用.

python random permutation discrete-mathematics python-3.x

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

当表示为对象的一维向量时,有效地旋转NxM矩阵(C++)

到目前为止,我已经想出顺时针旋转NxM(N不一定等于M)矩阵的唯一方法(当它表示为高维和宽度变量单独存储的一维向量时)如下:

struct matrix
{
  vector<int> data;
  int height;
  int width;

  void rotate_90()
  {
    vector<int> newdata(height*width);
    for(int index = 0; index < height*width; index++)
    {
      int x = index % width;
      int y = index/width; // integer division
      int nextindex = (x+1)*height - 1 - y;
      newdata[nextindex] = data[index];
    }
    data = newdata;
    int temp = height;
    height = width;
    width = temp;
  }
};
Run Code Online (Sandbox Code Playgroud)

虽然这种方法确实有效,但我确信有一种更有效的方法(特别是在节省时间方面;空间不是问题).必须创建一个全新的向量然后用新的向量覆盖旧向量并不适合我.有更有效的解决方案吗?

请记住,我上面提供的仅用于说明.data我实际代码中的向量使用对象而不是int; 使用int只是为了让它更容易测试.因此,像Eigen这样的线性代数库在这里无济于事.

c++ algorithm matrix linear-algebra

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