在python

时间:2015-08-27 20:03:28

标签: python python-2.7 matrix

我正在尝试学习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不能根据元素的位置进行迭代。也许我错了。这会有用吗?是否有更好的方法来制作这样的矩阵并用索引值填充它?

4 个答案:

答案 0 :(得分:5)

由于您已经在使用NumPy,因此可以使用numpy.arangenumpy.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