在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
保留奇数和偶数架构?
答案 0 :(得分:5)
26:34
要构建范围数组,我们可以这样做 -
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]])
添加偏见
假设我们想要向上或向下移动最高数字/峰值。我们需要创建另一个偏向数组并使用相同的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])
策略,如此 -
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]])
,如此 -
a