Я пытаюсь получить такую матрицу, как:
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]]
Я знаюкак заполнить матрицу постоянными значениями, но я не смог найти аналогичный вопрос для этого случая.
Очень просто:
data = np.arange(1, 40001).repeat(8).reshape(-1,8)
Несмотря на то, что это тоже чисто, но это значительно медленнее, чем решение @ yatu.
Для использования numpy трансляция через iterations вы можете сделать,
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.Если это то, что вы ищете
faster
Вот способ использования 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]])
Ответ Матье Брухера отлично подойдет для вашего случая.Если вы смотрите на числа, намного превышающие 4000, и если время является проблемой, вы, возможно, захотите избавиться от цикла for и создать список списков со списком, прежде чем превратить его в пустой массив:
a = [[i]*8 for i in range(1,4001)] m = np.asarray(a)
В моем случае это решение было ~ в 7 раз быстрее.
Используйте простой массив и не забывайте, что Python начинает индексирование с 0:
data = np.zeros((40000,8)) for i in range(data.shape[0]): data[i,:] = i+1