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)
这保留了奇数和偶数架构?
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)