#python #arrays
#python #массивы
Вопрос:
как мне написать код, чтобы показать операцию сложения между двумя массивами (по строкам), мне не нужен результат сложения, но я хочу проиллюстрировать операцию. Вот что у меня есть, однако мой код не дает мне правильного вывода
import numpy as np
Grid = np.random.randint(-50,50, size=(5,4))
iList =np.array([[1, -1, 2, -2]])
result = (Grid.astype(str), iList.astype(str))
print(result)
на выходе должно быть что-то подобное
([3 1 4-1 4 2 5-2]
[6 1 9-1 7 2 8-2]
и т.д.
Спасибо.
Ответ №1:
По сути, вы хотите применить функцию к двум массивам numpy разных размеров, используя широковещательные возможности numpy.
Это работает:
import numpy as np
grid = np.random.randint(-50, 50, size=(5, 4))
i_list = np.array([[1, -1, 2, -2]])
def sum_text(x: int, y: int):
return f'{x} {y}'
# create a ufunc, telling numpy that it takes 2 arguments and returns 1 value
np_sum_text = np.frompyfunc(sum_text, 2, 1)
result = np_sum_text(grid, i_list)
print(result)
Результат:
[['46 1' '-27 -1' '35 2' '-3 -2']
['-5 1' '6 -1' '2 2' '22 -2']
['6 1' '-45 -1' '-21 2' '31 -2']
['25 1' '-4 -1' '-24 2' '3 -2']
['-32 1' '-10 -1' '-19 2' '28 -2']]
Или, может быть, вам не нужно повторно использовать эту функцию и использовать однострочники:
print(np.frompyfunc(lambda x, y: f'{x} {y}', 2, 1)(grid, i_list))
Избавиться от
перед отрицательным целым числом тривиально:
def sum_text(x: int, y: int):
return f'{x} {y}' if y >= 0 else f'{x}{y}'
Комментарии:
1. Спасибо. Результат близок к желаемому результату, однако, например, в случае отрицательного числа в IList результатом будет «-27 -1», а вместо этого должно быть «-27-1»..
2. @ Grismar — добавляя условие if, оно работает для add_text(x: int, y: int): если y <0: возвращает f'{x}{y}’ else: возвращает f'{x} {y}’ # создайте ufunc, сообщив numpy, что для этого требуется2 аргумента и возвращает 1 значение np_add_text = np.frompyfunc(add_text, 2, 1) результат = np_add_text(сетка, список) печать (результат)