使用自定义体系结构构建Matrix的最快方法

Leb*_*oth 2 python numpy pandas

在numpy或pandas中构建具有以下形式的矩阵的最快方法是什么:

1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)

这保留了奇数和偶数架构?

Div*_*kar 5

NumPy brodacasting!

In [289]: a = np.array([1,2,3,2,1])

In [290]: np.minimum(a[:,None],a)
Out[290]: 
array([[1, 1, 1, 1, 1],
       [1, 2, 2, 2, 1],
       [1, 2, 3, 2, 1],
       [1, 2, 2, 2, 1],
       [1, 1, 1, 1, 1]])
Run Code Online (Sandbox Code Playgroud)

要构建范围数组,我们可以做这样的事情 -

In [303]: N = 3

In [304]: np.concatenate((np.arange(1,N+1),np.arange(N-1,0,-1)))
Out[304]: array([1, 2, 3, 2, 1])
Run Code Online (Sandbox Code Playgroud)

增加一些偏见

假设我们想要向上或向下移动最高数字/峰值.我们需要创建另一个偏置数组并使用相同的策略broadcasting,如下所示 -

In [394]: a = np.array([1,2,3,2,1])

In [395]: b = np.array([2,3,2,1,0]) # Biasing array

In [396]: np.minimum(b[:,None],a)
Out[396]: 
array([[1, 2, 2, 2, 1],
       [1, 2, 3, 2, 1],
       [1, 2, 2, 2, 1],
       [1, 1, 1, 1, 1],
       [0, 0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

同样,为了让偏差向左或向右移动,修改a,如此 -

In [397]: a = np.array([2,3,2,1,0]) # Biasing array

In [398]: b = np.array([1,2,3,2,1])

In [399]: np.minimum(b[:,None],a)
Out[399]: 
array([[1, 1, 1, 1, 0],
       [2, 2, 2, 1, 0],
       [2, 3, 2, 1, 0],
       [2, 2, 2, 1, 0],
       [1, 1, 1, 1, 0]])
Run Code Online (Sandbox Code Playgroud)