повторение numpy-массива N раз

#python #numpy #repeat

#python #numpy #повторение

Вопрос:

эксперты hii у меня есть 1d numpy-массив, и я хочу повторить его 3 раза по вертикали,

 my_input_array = [-1.02295637 -0.60583836 -0.42240581 -0.78376377 -0.85821456]
  

я попробовал приведенный ниже код

 import numpy as np
x=np.loadtxt(my_input_array)
x.concatenate()
  

однако я получаю error…in таким образом … надеюсь, я получу какое-то решение.Спасибо.

мой ожидаемый результат должен быть таким, как показано ниже

  -1.02295637
 -0.60583836
 -0.42240581
 -0.78376377
 -0.85821456
 -1.02295637
 -0.60583836
 -0.42240581
 -0.78376377
 -0.85821456
 -1.02295637
 -0.60583836
 -0.42240581
 -0.78376377
 -0.85821456
 
  

Комментарии:

1. И в чем ошибка?

2. проблема с конкатенацией…

3. Это не ошибка, указанная в коде

4. x.concatenate() — откуда у вас появилась идея сделать это? Это не документированный метод, не так ли? У вас будет много проблем, если вы будете делать дикие предположения, не проверяя документацию. Тем не менее, вы можете оказаться np.tile полезными — посмотрите его.

5. numpy.org/doc/stable/reference/generated/numpy.concatenate.html

Ответ №1:

Просто используйте tile метод, который умножает массив на заданную форму и reshape метод его структурирования. Используется x.shape[0]*x.shape[1] для преобразования его в вектор-столбец без явного указания размеров фигуры!

 x=np.tile(x,(3,1))
y=x.reshape(x.shape[0]*x.shape[1])
  

Комментарии:

1. мне не нужны никакие reshape…it должно быть автоматическим без изменения формы

2. Помогает ли это сейчас?

3. рад помочь.. Я просто думаю, что вам следует использовать этот метод, поскольку цикл for будет печатать только массив, но структура в виде векторного столбца действительно важна для манипулирования данными внутри!

Ответ №2:

numpy.tile

 np.tile(my_input_array, 3)
  

Вывод

 array([-1.02295637, -0.60583836, -0.42240581, -0.78376377, -0.85821456,
       -1.02295637, -0.60583836, -0.42240581, -0.78376377, -0.85821456,
       -1.02295637, -0.60583836, -0.42240581, -0.78376377, -0.85821456])
  

Редактировать: только что заметил ответ @hpaulj. Я все равно оставлю свой ответ, но сначала он упомянул np.tile.

Ответ №3:

Это то, что вы хотите:

 x=np.concatenate([my_input_array, my_input_array, my_input_array])
for i in x:
    print(i)
  

Вывод:

 -1.02295637
-0.60583836
-0.42240581
-0.78376377
-0.85821456
-1.02295637
-0.60583836
-0.42240581
-0.78376377
-0.85821456
-1.02295637
-0.60583836
-0.42240581
-0.78376377
-0.85821456
  

Комментарии:

1. но как организовать вывод, подобный моему ожидаемому результату … мне снова не нужен массив

2. В качестве альтернативы, np.concatenate([my_input_array]*3)

3. По умолчанию массивы numpy печатаются именно так. Если вам нужно конкретное форматирование, вам нужно выполнить форматирование. for f in my_array: `print(f)`

4. Конечно, это так. Вам нужно предоставить часть мозгов самостоятельно. Я предполагаю, что вы просто ввели мою команду, фактически не создавая массив. my_array = np.concatenate([my_input_array]*3)