在实施神经网络之前,我需要预处理一些数据。但我在数学方面是一个菜鸟,我无法在Python中找到一个能够做我想要的功能。
我有这样的矩阵:
[[0 4 ... 0 ]
[0 3 ... 6 ]
[0 3 ... 10]]
我有一个数字,例如7,它确定转换后我的新矩阵中必须有多少行。我想要实现的是:
[[0 4 ... 0 ]
[0 3.66 ... 2 ]
[0 3.33 ... 4 ]
[0 3 ... 6 ]
[0 3 ... 7.33]
[0 3 ... 8.66]
[0 3 ... 10 ]]
您看到第一列没有变化,因为对于原始矩阵中的每一行,第一列为零。 对于第二列,第一行在第四行从4到3缓慢减小并且在稳定之后。 最后,最后一列从0增加到10,经过6。
一位数学学生告诉我这是一个插值,但我无法在scipy的文档中找到如何正确地做到这一点。
你知道我该怎么做吗?
答案 0 :(得分:2)
您可以使用numpy.interp
。由于它仅适用于1D,我使用了for循环。
import numpy as np
# You input matrix:
a = np.array([[0, 4, 0], [0, 3, 6], [0, 3, 10]])
# Put the shape you need here:
old_dim, new_dim = a.shape[1], 7
# Define new matrix
b = np.zeros((7, a.shape[1]))
# Define linspace that will serve for interpolation
nls, ols = np.linspace(0, 1, new_dim), np.linspace(0, 1, old_dim)
# Interpolate on each column
for col in range(old_dim):
b[:,col] = np.interp(nls, ols, a[:,col])
print b
输出:
[[ 0. 4. 0. ]
[ 0. 3.66666667 2. ]
[ 0. 3.33333333 4. ]
[ 0. 3. 6. ]
[ 0. 3. 7.33333333]
[ 0. 3. 8.66666667]
[ 0. 3. 10. ]]
它不是2D插值函数,但我对scipy不太熟悉(并且numpy没有任何)。
修改强> 修复非方阵
的问题import numpy as np
a = np.array([[0, 4, 0], [0, 3, 6], [0, 3, 10]])
old_dim, n_col, new_dim = a.shape[0], a.shape[1], 7
b = np.zeros((7, n_col))
nls, ols = np.linspace(0, 1, new_dim), np.linspace(0, 1, old_dim)
for col in range(n_col):
b[:,col] = np.interp(nls, ols, a[:,col])
print b
我的错误,我在某个时候颠倒了n_col和n_rows。