我正在尝试学习python。在其中,我试图在python中动态生成N x M矩阵,其中每个单元格包含python中该单元格的索引值。
The matrix would look like:
[0,1,2,3,4
0,1,2,3,4
...]
我知道在java中它会像:
a={}{}
for (i=0;i<N;i++)
for (j=0;j<M:j++)
a[i][j] = i
其中N是矩阵的宽度,M是矩阵的高度
除了在python中,似乎我不能在单元格放置的基础上迭代矩阵,而是我需要根据单元格中的元素进行迭代。从我的经验来看
a = [][]
a = np.zeroes((N, M))
[ 0, 0, 0
0, 0, 0]
在N = 3且M = 2的情况下
然后是相同的循环风格:
j = 0
for i in len(a):
a[i][j] = i
if i == len(a):
j = j+1
不起作用,因为python不能根据元素的位置进行迭代。也许我错了。这会有用吗?是否有更好的方法来制作这样的矩阵并用索引值填充它?
答案 0 :(得分:5)
由于您已经在使用NumPy,因此可以使用numpy.arange
和numpy.tile
:
In [26]: N = 5
In [27]: M = 4
In [28]: np.tile(np.arange(N), (M, 1))
Out[28]:
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
答案 1 :(得分:1)
另一种选择是使用np.arange(5)
创建一行,并将其分配给零行矩阵的每一行。
In [22]: m = np.zeros((4,5))
In [23]: m[:,] = np.arange(5)
In [24]: m
Out[24]:
array([[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.],
[ 0., 1., 2., 3., 4.]])
答案 2 :(得分:0)
一些类似于Java示例的示例,但使用python语法糖。
>>> N=M=5
>>> for z in [[n for n in xrange(N)] for m in xrange(M)]:
... print z
...
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
[0, 1, 2, 3, 4]
答案 3 :(得分:0)
以下是矩阵包含该单元格的索引值的代码:
n,m=map(int,raw_input().split())
a=n*[m*[0]]
j=0
for i in range (0,n):
for j in range(0,m):
a[i][j]=j
for i in range (0,n):
for j in range(0,m):
print a[i][j],
print