![](/img/trans.png)
[英]How do I create binary matrix with specific pattern of 1s and 0s efficiently?
[英]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.