@Vechnyy

Как преобразовать массив в новый со следующими значениями?

Как преобразовать массив в новый через цикл for со следующими значениями?

* "small", если значения меньше 20
* "medium", если значения в промежутке [20, 30]
* "large", если значения больше 30

# создадим трехмерный массив для примера
a_random = np.random.randint(15, 37, (2, 3, 4))
print(a_random)
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
@o5a
b_random = np.select([a_random < 20, a_random <= 30, a_random > 30], ["small", "medium", "large"])
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, гуглер, экс-олимпиадник.
print ([("small" if a < 20 else "medium") if a <=30 else "large" for a in a_random])
Ответ написан
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Как преобразовать массив в новый через цикл for со следующими значениями

В отмеченном ответе цикла for не увидел.
Вообще такое решается рекурсией:
def mark(data):
    if isinstance(data, (int, np.int32)):
        if data < 20:return 'small'
        elif data <= 30:return 'medium'
        else:return 'large'
    elif isinstance(data, (list, np.ndarray)):
        return [mark(item) for item in data]   #  а вот и цикл for

a_random = np.random.randint(15, 37, (2, 3, 4))
print(a_random)
    
print(mark(a_random))


# [[[28 30 35 35]
#  [16 31 35 34]
#  [22 16 29 27]]
#
# [[23 35 24 19]
#  [26 21 22 28]
#  [30 25 36 15]]]
# [[['medium', 'medium', 'large', 'large'], ['small', 'large', 'large', 'large'], ['medium', 'small', 'medium', 'medium']], [['medium', 'large', 'medium', 'small'], ['medium', 'medium', 'medium', 'medium'], ['medium', 'medium', 'large', 'small']]]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы