python - 如何创建一个 1 形成“菱形”形状的二维二进制数组
问题描述
我需要创建一个在给定边长时产生菱形的函数。菱形数组应由值 0 和 1 组成。
到目前为止,我想出了如何制作钻石,我不知道如何为不同边长编写函数
到目前为止,我有这个边长为 3 的解决方案:
import numpy as np
#line1
a=np.zeros(3+2)
a[3-1]=1
#line2
b=np.zeros(3+2)
b[3-2]=1
b[3]=1
#line3
c=np.zeros(3+2)
c[3-3]=1
c[3+1]=1
print(np.concatenate((a,b,c,b,a),axis=1).reshape(5,5))
如何编写不同长度的函数?
此外,如果给定长度 1 它应该返回[[1]]
解决方案
您可以使用水平和垂直模式的交集来做到这一点:
import numpy as np
N = 5
H = abs(np.arange(1-N,N+1,2))//2
V = H[0] - H[:,None]
diamond = (H==V)*1
print(diamond)
[[0 0 1 0 0]
[0 1 0 1 0]
[1 0 0 0 1]
[0 1 0 1 0]
[0 0 1 0 0]]
从视觉上看,这对应于行和列之间的相交数相等:
对于 N=7:
[3, 2, 1, 0, 1, 2, 3]
0 . . . x . . .
1 . . x . x . .
2 . x . . . x .
3 x . . . . . x
2 . x . . . x .
1 . . x . x . .
0 . . . x . . .
对于 N=8:
[3, 2, 1, 0, 0, 1, 2, 3]
0 . . . x x . . .
1 . . x . . x . .
2 . x . . . . x .
3 x . . . . . . x
3 x . . . . . . x
2 . x . . . . x .
1 . . x . . x . .
0 . . . x x . . .
如果要填充钻石,请使用diamond = (H<=V)*1
推荐阅读
- jquery - 如何以雄辩的方式传递所有行数据并使用jquery获取
- android - 如何从 CLI 构建和运行 android 应用程序?
- linux - 当鼠标悬停在 Ubuntu 16.0 系统的选项卡上时,如何禁用铬浏览器中的弹出框?
- elasticsearch - elasticserach副本映射器中的不同类型错误
- ruby-on-rails - 如何在 Rails 中通过 Gemfile 安装 mysql2
- python - 更改 Pandas 中的列数
- python - 从具有无形状的向量生成零矩阵
- r - pheatmap 中缺少注释和颜色
- angular - 清晰数据网格+卡片功能
- azure - Azure Blob 下载超时 - 每分钟超过 2mb?