Python 如何使用NumPY对向下缩放函数进行矢量化?
给定NumPY中的一个NxM矩阵,我希望将其下采样为一个NxO矩阵(O试试这个函数)Python 如何使用NumPY对向下缩放函数进行矢量化?,python,numpy,matrix,Python,Numpy,Matrix,给定NumPY中的一个NxM矩阵,我希望将其下采样为一个NxO矩阵(O试试这个函数) def downsample(m, samples): weights = np.zeros((m.shape[1], samples)) for n in range(samples): pos = ((m.shape[1] - 1) / (samples + 1)) * (n + 1) if pos == np.floor(pos):
def downsample(m, samples):
weights = np.zeros((m.shape[1], samples))
for n in range(samples):
pos = ((m.shape[1] - 1) / (samples + 1)) * (n + 1)
if pos == np.floor(pos):
weights[int(np.floor(pos)), n] = 1
else:
weights[int(np.ceil(pos)), n] = pos - int(np.floor(pos))
weights[int(np.floor(pos)), n] = int(np.ceil(pos)) - pos
return np.matmul(m, weights)
它根据您描述的插值创建一个权重矩阵,然后将该权重应用于整个矩阵。我之所以这样做,是因为我没有使用沿坐标轴的apply_。我将手工再做几个矩阵来验证结果,并尝试阅读和理解代码,但我只是在问题中的样本3x10矩阵上进行了测试,然后t得到了正确的答案——所以看起来不错:)只是尝试使用相同的3x10样本矩阵,并将采样数从4降到5,而不是预期的
[2.5,4,5.5,7,8.5]
对于第一行,它返回[2.5,0,5.5,0,8.5]
。因此,当权重是一个精确的整数,像一个符咒一样工作时,会发生一些不确定的事情,在阅读了它的工作原理之后(还记得我在几年前从上帝那里得到的矩阵乘法),我也开始开发一种更优雅、更快速的解决方案,使用np.diag
来计算权重
矩阵,但我还没有完全做到。如果我找到了我正在研究的解决方案,我会接受这个问题并添加一个新的答案。快速更新:当我意识到我的想法是错误的时,我放弃了我的解决方案。可能有一种更快的方法来生成权重矩阵
,但我所做的不起作用。
1 2 3 4 5 6 7 8 9 10
|---|---|---|---|---|---|---|---|---|
* * * *
1 2 3 4
[
[2.8 4.6 6.4 8.2]
[8.2 6.4 4.6 2.8]
[4.4 4.8 5.2 5.6]
]
def downsample(m, samples):
weights = np.zeros((m.shape[1], samples))
for n in range(samples):
pos = ((m.shape[1] - 1) / (samples + 1)) * (n + 1)
if pos == np.floor(pos):
weights[int(np.floor(pos)), n] = 1
else:
weights[int(np.ceil(pos)), n] = pos - int(np.floor(pos))
weights[int(np.floor(pos)), n] = int(np.ceil(pos)) - pos
return np.matmul(m, weights)