假设我有两个相同采样率的音频段,它们是从 Pydub 中的 .wav 文件导入的,并假设我知道哪个更短。现在假设我想将较长的音频文件分成两段,以便第一段与较短的音频文件具有完全相同的长度(下降到完全相同的样本数!)并将这两个段中的每一个分配给新的音频段. 我怎样才能在 Pydub 中做到这一点? 如果我不能使用 Pydub 达到这种精度水平,你能给我一个同样有效的替代方案吗?
假设我有一个任意长度的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))为了简单而使用.
到目前为止,我已经想出顺时针旋转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这样的线性代数库在这里无济于事.
python ×2
python-3.x ×2
algorithm ×1
audio ×1
c++ ×1
matrix ×1
permutation ×1
pydub ×1
random ×1
sample-rate ×1