如何使用‘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]]`
答案 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