Python numpy如何单行实现填充X形1的全0矩阵生成
可行的单行实现方案
你可以直接用以下任意一种单行代码替换原分割线之间的逻辑,都可以避免奇数尺寸中心值为2的问题:
- 布尔判断转整型(最简洁推荐)
m = (np.eye(size) + np.fliplr(np.eye(size)) > 0).astype(int)
原理是两条对角线相加后,非0的位置就是需要设为1的位置,直接布尔值转整型即可得到符合要求的矩阵。
- 最大值法
m = np.maximum(np.eye(size), np.fliplr(np.eye(size))).astype(int)
原理是取两个对角矩阵对应位置的最大值,不会出现相加得2的情况,直接转整型即可。
- 索引直接赋值法
m = np.zeros((size, size), dtype=int); m[range(size), range(size)] = m[range(size), range(size-1, -1, -1)] = 1
原理是利用numpy的高级索引直接给两条对角线赋值1,用分号分隔两个语句实现单行。
如果想要整个函数的实现更简洁,甚至可以直接在return中写逻辑,不需要单独定义变量m:
def mat(size): return (np.eye(size) + np.fliplr(np.eye(size)) > 0).astype(int)
所有方案的输出都完全匹配你给出的X形矩阵示例。
内容的提问来源于stack exchange,提问作者Tiran
相关产品推荐
相关产品推荐

