Повторите значения в массиве 1D NumPy "N" раз - PullRequest
0 голосов
/ 29 мая 2018

У меня есть следующий массив:

[9.975 9.976 9.977 9.978 9.979 9.98  9.981 9.982 9.983 9.984 9.985 9.986
9.987 9.988 9.989 9.99  9.991 9.992 9.993 9.994]

Теперь я хотел бы скопировать эти значения в n столбцов в одной строке.Результат должен выглядеть следующим образом:

[[9.975 9.975 9.975],
 [9.976 9.976 9.976],
 ..... 
 [9.994 9.994 9.994]]

Знаете ли вы, как это возможно?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 29 мая 2018

Мы можем запустить цикл for и сохранить номер в пустом списке.Затем мы можем взять этот пустой список и затем превратить его в массив, чтобы получить результат, который вы ищете.Вот пример:

import numpy as np



array = np.array([9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981, 9.982, 9.983, 9.984, 9.985, 9.986,
                  9.987, 9.988, 9.989, 9.99,  9.991, 9.992, 9.993, 9.994])
empty_list = []

for number in array:
    num1 = float(number)
    num2 = float(number)
    num3 = float(number)
    empty_list.append(num1)
    empty_list.append(num2)
    empty_list.append(num3)

array = np.array(empty_list).reshape(20, 3)
print(array)

А вот ваш вывод:

[[ 9.975  9.975  9.975]
 [ 9.976  9.976  9.976]
 [ 9.977  9.977  9.977]
 [ 9.978  9.978  9.978]
 [ 9.979  9.979  9.979]
 [ 9.98   9.98   9.98 ]
 [ 9.981  9.981  9.981]
 [ 9.982  9.982  9.982]
 [ 9.983  9.983  9.983]
 [ 9.984  9.984  9.984]
 [ 9.985  9.985  9.985]
 [ 9.986  9.986  9.986]
 [ 9.987  9.987  9.987]
 [ 9.988  9.988  9.988]
 [ 9.989  9.989  9.989]
 [ 9.99   9.99   9.99 ]
 [ 9.991  9.991  9.991]
 [ 9.992  9.992  9.992]
 [ 9.993  9.993  9.993]
 [ 9.994  9.994  9.994]]

Короче, мы просто запускаем цикл for для каждого числа, сохраняем его три раза в пустом спискесоздайте массив, измените его, и затем мы получим вывод, который вы ищете.

0 голосов
/ 29 мая 2018

Используйте цикл for

lst = [9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981, 9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988, 9.989, 9.99,  9.991, 9.992, 9.993, 9.994]
rslt = []
n = 3
for i in lst:
    rslt.append([i for j in range(n)])

Редактировать: чтобы сделать его еще более питоническим, хотя и немного менее читабельным:

lst = [9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981, 9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988, 9.989, 9.99,  9.991, 9.992, 9.993, 9.994]
n = 3
rslt = [[i for j in range(n)] for i in lst]
0 голосов
/ 29 мая 2018

Поскольку вы используете numpy, используйте np.repeat + np.reshape:

>>> np.repeat(arr, 3).reshape(-1, 3)
array([[9.975, 9.975, 9.975],
       [9.976, 9.976, 9.976],
       [9.977, 9.977, 9.977],
       [9.978, 9.978, 9.978],
       [9.979, 9.979, 9.979],
       [9.98 , 9.98 , 9.98 ],
       [9.981, 9.981, 9.981],
       [9.982, 9.982, 9.982],
       [9.983, 9.983, 9.983],
       [9.984, 9.984, 9.984],
       [9.985, 9.985, 9.985],
       [9.986, 9.986, 9.986],
       [9.987, 9.987, 9.987],
       [9.988, 9.988, 9.988],
       [9.989, 9.989, 9.989],
       [9.99 , 9.99 , 9.99 ],
       [9.991, 9.991, 9.991],
       [9.992, 9.992, 9.992],
       [9.993, 9.993, 9.993],
       [9.994, 9.994, 9.994]])
0 голосов
/ 29 мая 2018

Попробуйте это:

a = [ 9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981,
      9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988,
      9.989, 9.99,  9.991, 9.992, 9.993, 9.994 ]
n = 3
print([[x] * n for x in a])

Я получаю этот ответ из вашего примера вывода.В вашей формулировке не ясно указано, что вы хотите.

Если вы используете numpy, я предлагаю следующее решение:

a = np.array([ 9.975, 9.976, 9.977, 9.978, 9.979, 9.98,  9.981,
               9.982, 9.983, 9.984, 9.985, 9.986, 9.987, 9.988,
               9.989, 9.99,  9.991, 9.992, 9.993, 9.994 ])
print(np.array([ a ] * 3).transpose())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...