簡體   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