Пифонический способ быстрой замены элемента i на `` `[i, i, i]` `` в массиве NumPy?

1

Я видел много вопросов с ответами о том, как эффективно заменить элементы массива NumPy конкретными вещами, такими как "1" или что-то, если они удовлетворяют определенным условиям.

Я хочу заменить все элементы в двумерном массиве NumPy на собственный массив, т.е. элемент i превращается в элемент [i,i,i] или, возможно, [f(i),g(i),h(i)] для некоторых функций f(x),g(x),h(x) которые я указываю. Как это можно сделать питонически (и желательно, способом, приемлемым для Нумбы)?

  • 0
    Таким образом, результат должен быть 3D?
  • 0
    Да уж. Возможно, легко догадаться, что это просто способ, которым я взял двумерный массив скаляров и преобразовал его в то, что я хочу для изображения RGB. Я пытался придумать какой-то способ сделать это, создав новый массив b=np.empty(list(np.shape(a))+[3]) а затем что-то с ним сделав, но я не знаю достаточно NumPy идти оттуда.
Показать ещё 1 комментарий
Теги:
numpy
multidimensional-array
numba

1 ответ

0

Используйте np.repeat:

a = np.repeat(np.arange(30).reshape(10, 3)[..., np.newaxis], 3, axis=2)
print(a.shape)
print(0, 0, :)

Выход:

(10, 3, 3)
[0 0 0]
  • 0
    Как это работает?
  • 0
    Добавьте новую ось в последнюю позицию с помощью np.newaxis , а затем повторите исходный массив трижды вдоль новой оси.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню