我正在寻找一种用于生成新的(n + 1)维数组(下例中的3D“变形”)的numpy解决方案,该数组包含初始数组和最终数组之间的多个n-dim中间数组数组(下例中的2D“开始”和“结束”)。
我尝试了以下内容:
import numpy as np
start = np.arange(6).reshape(2, 3)
end = np.array([18, 10, 17, 15, 10, 2]).reshape(2, 3)
print(start)
print(end)
给我们一个开始和结束数组:在这种情况下为开始:
[[0 1 2]
[3 4 5]]
并结束:
[[18 10 17]
[15 10 2]]
渐变转换数组可以按如下方式生成:
morph = np.zeros((4, start.shape[0], (start.shape[1]))) # adding 2 arrays in between
for i in np.arange(start.shape[0]): # for each row
for j in np.arange(start.shape[1]): # for each column
morph[:, i, j] = np.linspace(start[i, j], end[i, j], 4)
# calculating array of intermediate values
print(morph)
给我们所需的输出:
[[[ 0. 1. 2.]
[ 3. 4. 5.]]
[[ 6. 4. 7.]
[ 7. 6. 4.]]
[[ 12. 7. 12.]
[ 11. 8. 3.]]
[[ 18. 10. 17.]
[ 15. 10. 2.]]]
有一个更好(更快)的方式,一个numpy例程这样做而不需要2个循环?我希望有类似的东西(在开始和结束之间生成一个新的线性间隔数组):
morph = np.linspace(start.all(), end.all(), 4)
但后来我得到了:
[ 0. 0.33333333 0.66666667 1. ]
这不是意图,也不是预期的结果。
感谢您的时间!