python - 在矩阵中每隔一行添加一个新行,其元素是其上方和下方元素的平均值

标签 python numpy matrix average

我有一个矩阵,比如说:

A = [1, 2, 3]
    [4, 5, 6]
    [7, 8, 9]

我想构造另一个矩阵,有两个额外的行

B = [1,    2,    3]
    [2.5, 3.5, 4.5]
    [4,     5,   6]
    [5.5, 6.5, 7.5]
    [7,     8,   9]

其中第二行和第四行上的每个元素都是其上方和下方元素的平均值。

我想在 python、numpy 中对 n x m 矩阵执行此操作。

编辑:对此的概括是每 n 行插入两个相邻行的平均值。例如

     A = [ 1,  2,  3]
         [ 4,  5,  6]
         [ 7,  8,  9]
         [10, 11, 12]
         [13, 14, 15]
         [16, 17, 18]
         [19, 20, 21]

并且,对于 n = 3 ,B 将变为

     B = [ 1,  2,  3]
         [ 4,  5,  6]
         [ 7,  8,  9]
         [8.5, 9.5, 10.5]
         [10, 11, 12]
         [13, 14, 15]
         [16, 17, 18]
         [17.5, 18.5, 19.5]
         [19, 20, 21]

等等。 AVERAGE 层仍然是其上方一层和下方一层的平均值。我正在寻找一个函数,可以为任何 n 提供此值。

最佳答案

这是一种利用切片的方法 -

newvals = (A[1:] + A[:-1])/2.0
out = np.empty((A.shape[0]+newvals.shape[0],A.shape[1]))
out[::2] = A
out[1::2] = newvals

这是另一个带有 np.insert 的通用案例 -

np.insert(A.astype(float),range(1,A.shape[0]),newvals,axis=0)

泛化以处理所有可能的n -

def insert_row_averages(A, n=1):
    slice2 = A[n::n]
    v = (A[n-1::n][:slice2.shape[0]] + slice2)/2.0
    return np.insert(A.astype(float),n*np.arange(1,v.shape[0]+1),v,axis=0)

示例运行 -

In [195]: A0
Out[195]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

In [196]: insert_row_averages(A0, n=1)
Out[196]: 
array([[ 1. ,  2. ,  3. ],
       [ 2.5,  3.5,  4.5],
       [ 4. ,  5. ,  6. ],
       [ 5.5,  6.5,  7.5],
       [ 7. ,  8. ,  9. ]])

In [197]: A
Out[197]: 
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12],
       [13, 14, 15],
       [16, 17, 18],
       [19, 20, 21]])

In [198]: insert_row_averages(A, n=3)
Out[198]: 
array([[  1. ,   2. ,   3. ],
       [  4. ,   5. ,   6. ],
       [  7. ,   8. ,   9. ],
       [  8.5,   9.5,  10.5],
       [ 10. ,  11. ,  12. ],
       [ 13. ,  14. ,  15. ],
       [ 16. ,  17. ,  18. ],
       [ 17.5,  18.5,  19.5],
       [ 19. ,  20. ,  21. ]])

关于python - 在矩阵中每隔一行添加一个新行,其元素是其上方和下方元素的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41765571/

相关文章:

python - 稀疏矩阵行中的连续元素

python - 获取调用该函数的文件的绝对路径

python - 为什么自定义异常字符串打印为数组?

c++ - C++ 中矩阵的用户输入

python - 替换 numpy 数组中的元素避免循环

python - numpy 数组大小与连接速度

r - 在R中,当使用命名行时,稀疏矩阵列可以添加(连接)到另一个稀疏矩阵吗?

python - 具有多个站点的 django 应用程序 - 如何限制员工的访问

python - 相同的类型如何在MyPy中不兼容?

python - 通过梯度下降学习或门