首页 > 解决方案 > 在开始和结束 nD 数组之间生成渐变 (n+1)D 数组变形

问题描述

我正在寻找一个 numpy 解决方案来生成一个新的 (n+1) 维数组(在下面的示例中为 3D“变形”),该数组由初始数组和最终数组(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.        ]

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

感谢您的时间!

标签: pythonarraysnumpy

解决方案


推荐阅读