[英]Creating a matrix in python alternating between 1s and 0s
For a 3 by 3 matrix, how can I create a matrix that has values which alternate 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
Above is edited text of the code I used to create a 3 by 3 matrix with zeros, however, I want something like this上面是我用来创建一个带零的 3 x 3 矩阵的代码的编辑文本,但是,我想要这样的东西
1 0 1
0 1 0
1 0 1
A 3 by 3 matrix that alternates between 1 and zero question beforehand.一个 3 x 3 矩阵,预先在 1 和 0 问题之间交替。 Is there any way of doing this?
有没有办法做到这一点?
You could slice and reshape. 您可以切片并重塑形状。
import numpy as np
n = 3
a = np.zeros(n*n, dtype=int)
a[::2]=1
a = a.reshape(n, n)
If you prefer not using numpy, Peter Wood's suggestion is nice and compact. 如果您不喜欢不使用numpy,则Peter Wood的建议很好且紧凑。
values
is an iterator that yields 0 and 1 forever: 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]]
It works well when the number of columns is odd, not when it's even: 当列数为奇数而不是偶数时,它可以很好地工作:
>>> 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]]
If you want to avoid using numpy
: 如果要避免使用
numpy
:
flat_list = [1-i%2 for i in xrange(9)]
print [flat_list[i:i+3] for i in xrange(0,9,3)]
Here is a function to create a nxm 1 0 matrix.这是一个创建 nxm 1 0 矩阵的函数。 If you want to start with 0 1 sequence, consider to modify the code block a litte.
如果你想从 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.