hdc*_*c94 5 python numpy vectorization
我一直在努力地制作这个数组,但是以向量化的方式成功却没有成功。
我需要一个函数,该函数需要2d数组大小n并生成一个大小为(n,n)的2d数组,如下所示:
n = 6
np.array([[0,0,0,0,0,0],
[0,1,1,1,1,0],
[0,1,2,2,1,0],
[0,1,2,2,1,0],
[0,1,1,1,1,0],
[0,0,0,0,0,0],
Run Code Online (Sandbox Code Playgroud)
(并且可以采用奇数参数)
任何建议将不胜感激,谢谢!
方法1
我们可以使用broadcasting-
def pyramid(n):
r = np.arange(n)
d = np.minimum(r,r[::-1])
return np.minimum.outer(d,d)
Run Code Online (Sandbox Code Playgroud)
方法#2
我们也可以使用concatenation来创建d,就像这样-
d = np.r_[np.arange(n//2),np.arange(n//2-(n%2==0),-1,-1)]
Run Code Online (Sandbox Code Playgroud)
因此,给我们一种替代的单线-
np.minimum.outer(*(2*[np.r_[np.arange(n//2),np.arange(n//2-(n%2==0),-1,-1)]]))
Run Code Online (Sandbox Code Playgroud)
样品运行-
In [83]: pyramid(5)
Out[83]:
array([[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 1, 2, 1, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]])
In [84]: pyramid(6)
Out[84]:
array([[0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 0],
[0, 1, 2, 2, 1, 0],
[0, 1, 2, 2, 1, 0],
[0, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0]])
In [85]: pyramid(8)
Out[85]:
array([[0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 2, 2, 2, 2, 1, 0],
[0, 1, 2, 3, 3, 2, 1, 0],
[0, 1, 2, 3, 3, 2, 1, 0],
[0, 1, 2, 2, 2, 2, 1, 0],
[0, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |