【发布时间】:2020-02-26 01:29:20
【问题描述】:
给定 NumPY 中的 NxM 矩阵,我希望将其下采样为 NxO 矩阵 (O
例如,考虑一个 3x10 矩阵:
[
[1 2 3 4 5 6 7 8 9 10]
[10 9 8 7 6 5 4 3 2 1 ]
[4 6 4 6 4 6 4 6 4 6 ]
]
如果我将其下采样为 3x4 矩阵,则值可能会像这样对齐:
1 2 3 4 5 6 7 8 9 10
|---|---|---|---|---|---|---|---|---|
* * * *
1 2 3 4
一般给定M个原始元素被下采样到O个新元素,第一个元素应该从(M-1)/(O+1)采样,额外的采样在(M-1)/(O+1)的步骤中进行。这可以在上图中看到,其中 10 个原始元素在元素之间产生 9 个“间隙”。我们希望将这个 9 个“间隙”的距离分成 5 个相等的部分(在左侧和右侧留下相等的空间,每个元素之间的间距相等)。所以每个新元素相隔 9/5 = 1.8 个“间隙”:
- 新元素 0 = 旧元素 1.8
- 新元素 1 = 旧元素 3.6
- 新元素 2 = 旧元素 5.4
- 新元素 3 = 旧元素 7.2
使用基本的线性插值,我们可以说“元素 1.8”是元素 2 的 80% 加上元素 1 的 20%
因此我的最终矩阵如下所示:
[
[2.8 4.6 6.4 8.2]
[8.2 6.4 4.6 2.8]
[4.4 4.8 5.2 5.6]
]
我考虑只编写一个函数来计算输出值并使用np.apply_along_axis() 方法,但后来我看到this StackOverflow post 说这样做只是一个脆弱的 for 循环包装器,你最好将你的向量化功能。
那么如何矢量化呢?能做到吗?
【问题讨论】:
-
我赞成这个只是因为不使用 apply_along_axis。