Numpy矩阵初始化,行升序

时间:2018-12-31 10:37:48

标签: python numpy matrix

我尝试建立一个像这样的矩阵:

M= [[1,1,..,1],
    [2,2,..,2],
    ...
    [40000, 40000, ..,40000]

这是我尝试过的:

data = np.mat((40000,8))
print(data.shape)
for i in range(data.shape[0]):
     data[i,:] = i

print(data[:5])

上面的代码打印:

(1, 2)
[[0 0]]

我知道如何用常量值填充矩阵,但是在这种情况下我找不到类似的问题。

5 个答案:

答案 0 :(得分:3)

这是使用numpy的一种方式:

rows = 10
cols = 3
l = np.arange(1,rows)
np.tile(l,cols).reshape(cols,rows-1).T
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3],
       [4, 4, 4],
       [5, 5, 5],
       [6, 6, 6],
       [7, 7, 7],
       [8, 8, 8],
       [9, 9, 9]])

答案 1 :(得分:2)

使用一个简单的数组,不要忘记Python从0开始索引:

data = np.zeros((40000,8))
for i in range(data.shape[0]):
     data[i,:] = i+1

答案 2 :(得分:1)

Matthieu Brucher的回答将完全适合您的情况。如果您要查看的数字远高于4000,并且如果时间很成问题,则可能要摆脱for循环并使用列表理解来创建列表列表,然后将其转换为numpy数组:

a = [[i]*8 for i in range(1,4001)]
m = np.asarray(a)

就我而言,此解决方案的速度提高了约7倍。

答案 3 :(得分:1)

要使用通过numpy广播的iterations

import numpy as np

M = np.ones((40000,8), dtype=np.int).T * np.arange(1, 40001)
M = M.T
print(M)

此值应比faster以上的任何iterations。 如果这就是您要寻找的

答案 4 :(得分:1)

非常简单:

data = np.arange(1, 40001).repeat(8).reshape(-1,8)

尽管这也是纯粹的numpy,但比@yatu的解决方案要慢得多。