【问题标题】:Creating a matrix in python alternating between 1s and 0s在python中创建一个在1s和0s之间交替的矩阵
【发布时间】:2015-07-23 08:28:04
【问题描述】:

对于 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

预先在 1 和 0 问题之间交替的 3 x 3 矩阵。有没有办法做到这一点?

【问题讨论】:

  • 是的,当然有,但是你试过什么,到底有什么问题?注意,你可以结合ij来确定每个数字应该是0 还是1
  • 使用(i + j + 1) % 2 而不是0
  • 彼得伍德,你能解释一下为什么 (i+j+1)%2 得到 1 0 1 吗?我不明白为什么第二个 1 变成 1,因为我没有分配值,这不意味着它将是 0+0+1%,即 0.5。
  • @Mad_Questionnaire % 是模运算符 => 0 % 2 = 0, 1 % 2 = 1, 2 % 2 = 0, ...
  • 哦,@JulienSpronck,看来我对模运算符的作用有误,我只是认为它在这种情况下将它除以 2 并给出答案。

标签: python list loops matrix


【解决方案1】:

你可以切片和重塑。

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

如果您不喜欢使用 numpy,Peter Wood 的建议非常简洁。

【讨论】:

    【解决方案2】:

    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]]
    

    【讨论】:

      【解决方案3】:

      如果你想避免使用numpy

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

      【讨论】:

        【解决方案4】:

        这是一个创建 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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-12
          • 2019-07-23
          • 2020-05-19
          • 1970-01-01
          • 2017-05-22
          • 2018-01-16
          • 2023-03-11
          • 1970-01-01
          相关资源
          最近更新 更多