我尝试建立一个像这样的矩阵:
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]]
我知道如何用常量值填充矩阵,但是在这种情况下我找不到类似的问题。
答案 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的解决方案要慢得多。