Инициализация Numpy Matrix с возрастающими числами для строк - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь получить такую ​​матрицу, как:

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 голосов
/ 31 декабря 2018

Очень просто:

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

Несмотря на то, что это тоже чисто, но это значительно медленнее, чем решение @ yatu.

0 голосов
/ 31 декабря 2018

Для использования 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.Если это то, что вы ищете

0 голосов
/ 31 декабря 2018

Вот способ использования 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]])
0 голосов
/ 31 декабря 2018

Ответ Матье Брухера отлично подойдет для вашего случая.Если вы смотрите на числа, намного превышающие 4000, и если время является проблемой, вы, возможно, захотите избавиться от цикла for и создать список списков со списком, прежде чем превратить его в пустой массив:

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

В моем случае это решение было ~ в 7 раз быстрее.

0 голосов
/ 31 декабря 2018

Используйте простой массив и не забывайте, что Python начинает индексирование с 0:

data = np.zeros((40000,8))
for i in range(data.shape[0]):
     data[i,:] = i+1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...