Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用NumPY对向下缩放函数进行矢量化?_Python_Numpy_Matrix - Fatal编程技术网

Python 如何使用NumPY对向下缩放函数进行矢量化?

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):

给定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):
            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)