值等于偏离中心 row/column 的 Numpy 矩阵

Numpy matrix with values equal to offset from central row/column

对于给定的奇数 a,我想生成两个矩阵,其中值表示在 x 或 y 方向上距中心 row/column 的偏移量。 a=5 示例:

    | -2 -1 0 1 2 |        | -2 -2 -2 -2 -2 |
    | -2 -1 0 1 2 |        | -1 -1 -1 -1 -1 |
X = | -2 -1 0 1 2 |    Y = |  0  0  0  0  0 |
    | -2 -1 0 1 2 |        |  1  1  1  1  1 |
    | -2 -1 0 1 2 |        |  2  2  2  2  2 |

使用 Numpy 实现此目的的最简单方法是什么?

np.arangenp.repeat 可以:

a = 5

limits = -(a//2), a//2 + 1
col = np.c_[np.arange(*limits)]

Y = np.repeat(col, repeats=a, axis=1)
X = Y.T

只需使用 Numpy 模块的 fancy indexing 技术。以下代码演示了 5X5 矩阵的解决方案:

import numpy as np


if __name__=='__main__':
    A = np.zeros((5, 5))
    A[np.arange(5), :] = np.arange(5)//2 - np.arange(5)[::-1]//2

    B = np.zeros((5, 5))
    B[:, np.arange(5)] = np.arange(5)//2 - np.arange(5)[::-1]//2
    B = B.T

输出

[[-2. -1.  0.  1.  2.]
 [-2. -1.  0.  1.  2.]
 [-2. -1.  0.  1.  2.]
 [-2. -1.  0.  1.  2.]
 [-2. -1.  0.  1.  2.]]
[[-2. -2. -2. -2. -2.]
 [-1. -1. -1. -1. -1.]
 [ 0.  0.  0.  0.  0.]
 [ 1.  1.  1.  1.  1.]
 [ 2.  2.  2.  2.  2.]]

干杯。

尝试 meshgrid:

n=5
X,Y = np.meshgrid(np.arange(n),np.arange(n))
X -= n//2
Y -= n//2

或者

n = 5
range_ = np.arange(-(n//2), n-n//2)
X,Y = np.meshgrid(range_, range_)

另请查看 ogrid