簡體   English   中英

在python中創建一個在1和0之間交替的矩陣

[英]Creating a matrix in python alternating between 1s and 0s

對於 3 x 3 矩陣,如何創建一個值在 1 和 0 之間交替的矩陣?

table = [ [ 0 for i in range(3) ] for j in range(3) ]
for row in table:
    for d1 in range(3):
        for d2 in range(3):  
            table[d1][d2]
    print row

上面是我用來創建一個帶零的 3 x 3 矩陣的代碼的編輯文本,但是,我想要這樣的東西

1 0 1
0 1 0 
1 0 1

一個 3 x 3 矩陣,預先在 1 和 0 問題之間交替。 有沒有辦法做到這一點?

您可以切片並重塑形狀。

import numpy as np
n = 3
a = np.zeros(n*n, dtype=int)
a[::2]=1
a = a.reshape(n, n)

如果您不喜歡不使用numpy,則Peter Wood的建議很好且緊湊。

values是一個永遠產生0和1的迭代器:

>>> from itertools import cycle
>>> values = cycle([0, 1])
>>> [[next(values) for i in range(3)] for j in range(3)]
[[0, 1, 0],
 [1, 0, 1],
 [0, 1, 0]]

當列數為奇數而不是偶數時,它可以很好地工作:

>>> values = cycle([0, 1])
>>> [[next(values) for i in range(5)] for j in range(4)]
[[0, 1, 0, 1, 0],
 [1, 0, 1, 0, 1],
 [0, 1, 0, 1, 0],
 [1, 0, 1, 0, 1]]

>>> values = cycle([0, 1])
>>> [[next(values) for i in range(4)] for j in range(5)]
[[0, 1, 0, 1],
 [0, 1, 0, 1],
 [0, 1, 0, 1],
 [0, 1, 0, 1],
 [0, 1, 0, 1]]

如果要避免使用numpy

flat_list = [1-i%2 for i in xrange(9)]
print [flat_list[i:i+3] for i in xrange(0,9,3)]

這是一個創建 nxm 1 0 矩陣的函數。 如果你想從 0 1 序列開始,可以考慮稍微修改一下代碼塊。

import numpy as np
def my_one_zero_matrix(n,m):
    zeros_a=np.zeros((n,m))
    for i in range(n):
        for j in range(m):
            if (i+j)%2==0:
                zeros_a[i,j]=1
    return zeros_a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM