python - 构建二维金字塔数组 - Python / NumPy
问题描述
一段时间以来,我一直在努力制作这个数组,但以矢量化的方式没有成功。
我需要一个函数,它接收二维数组大小 n 并生成一个大小为 (n, n) 的二维数组,如下所示:
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],
(并且可以采用奇数参数)
任何建议将不胜感激,谢谢!
解决方案
方法#1
我们可以使用broadcasting
-
def pyramid(n):
r = np.arange(n)
d = np.minimum(r,r[::-1])
return np.minimum.outer(d,d)
方法#2
我们也可以使用concatenation
创建d
,像这样 -
d = np.r_[np.arange(n//2),np.arange(n//2-(n%2==0),-1,-1)]
因此,给我们一个替代的单行 -
np.minimum.outer(*(2*[np.r_[np.arange(n//2),np.arange(n//2-(n%2==0),-1,-1)]]))
样品运行 -
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]])
推荐阅读
- windows - Master 卡在“等待端口 4445 上可能的 Shutdown/StopTestNow/HeapDump/ThreadDump 消息”
- c# - 如何反序列化一个对象中的多个对象?
- spring - Spring批处理FTP文件
- azure - 查看实时数据的最低权限 - Azure Kubernetes
- r - 使用 R 计算重复组合
- svn - Subversion / SVN:我可以导入本地存储库/目录吗?
- kubernetes - 如何在没有 certmanager 的情况下使用 Gitlab Helm 图表并使注册表也可以工作
- python - 禁用调试时,静态文件未在 Django 2.2 中呈现
- docker - Docker Compose extra_hosts 从 env_file 而不是默认的 .env 文件
- c++ - qml 中的连接 qml 拨号和滑块