在起始和结束nD数组之间生成逐渐变换(n + 1)D数组变形

时间:2018-05-31 16:06:15

标签: python arrays numpy

我正在寻找一种用于生成新的(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.        ]

这不是意图,也不是预期的结果。

感谢您的时间!

0 个答案:

没有答案