繁体   English   中英

如何创建具有特定重复模式 1 和 0 的二进制矩阵?

[英]How do I create a binary matrix with a specific repeating pattern of 1s and 0s?

我想在 Python 中有效地打印一个矩阵,该矩阵在一列中的 3 个 1 的列中遵循重复的特定模式,列 0 的 rest 然后列 1 切换,依此类推,共 1000 行,如下所示:

100000
100000
100000
010000
010000
010000
001000
001000
001000
000100
000100
000100
000010
000010
000010
000001
000001
000001
100000
100000
100000
010000
010000
010000
 ...

首先,您可以创建一个大小为(6, 6)的对角矩阵,对角线上只有一个:

>>> arr = np.diag(np.ones(6))

然后,您可以将该矩阵的每一行重复3次:

>>> arr = np.repeat(arr, repeats=3, axis=0)
>>> arr
[[1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 [1. 0. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 0. 0. 1.]]

最后,使用np.tile将此矩阵平铺您想要的次数。 在您的情况下,如果您想要 1000 行,您可以重复数组1000 // 18 + 1 = 56次,并且只保留前1000行。

>>> arr = np.tile(arr, (56, 1))[:1000]

建立一个单位矩阵,然后通过生成行索引取出你需要的矩阵(优雅但低效):

>>> np.eye(6, dtype=int)[np.arange(1000) // 3 % 6]
array([[1, 0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0],
       ...,
       [0, 0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0, 0],
       [0, 0, 0, 1, 0, 0]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM