#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:
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)