在Python中使用图块函数的n * n矩阵

时间:2019-01-01 18:23:53

标签: python numpy tile

如何使用‘n*n’创建具有值0 and 1的{​​{1}}棋盘格矩阵。

例如: 当n的值为2时,输出应为: tile function

我能够创建一个 [[0 1] [1 0]],但是它们没有出现,下面是我尝试的方法:

`

matrix with 0 and 1

我得到的输出:

`

import numpy as np
n = 4
arr = ([0,1])
print(np.tile(arr,(n,n//2)))
`

我想要的输出:

`

[[0 1 0 1]
 [0 1 0 1]
 [0 1 0 1]
 [0 1 0 1]]`

3 个答案:

答案 0 :(得分:1)

您可以使用numpy花式indexing,而无需使用np.tile

import numpy as np

def tiling(n):
    result = np.zeros((n, n))
    result[::2, 1::2] = 1
    result[1::2, ::2] = 1
    return result


print(tiling(2))
print()
print(tiling(4))

输出

[[0. 1.]
 [1. 0.]]

[[0. 1. 0. 1.]
 [1. 0. 1. 0.]
 [0. 1. 0. 1.]
 [1. 0. 1. 0.]]

答案 1 :(得分:1)

这是一个numpy解决方案:

a = np.resize([0,1], n)
m = np.abs(a-np.array([a]).T)

给出n的各种值:

n = 2
array([[0, 1],
       [1, 0]])

n = 3
array([[0, 1, 0],
       [1, 0, 1],
       [0, 1, 0]])

n = 4
array([[0, 1, 0, 1],
       [1, 0, 1, 0],
       [0, 1, 0, 1],
       [1, 0, 1, 0]])

答案 2 :(得分:0)

这里是单行numpy解决方案。就是说,我认为Daniel的回答更具可读性,而且可能更有效率。

如果n为奇数,则np.arange(n*n).reshape(n,n)%2给出正确的结果。但是,如果n是偶数,则所有行和列都将相同(如您的结果)。我们可以通过每隔一行减去一个来解决此问题。

tile = (np.arange(n*n).reshape(n,n)-np.arange(n).reshape(n,1)*(n%2+1))%2

等效地,

tile = (np.arange(n*n).reshape(n,n,order='F')-np.arange(n)*(n+1))%2