У меня есть numpy ndarray (квадрат n-мерный с одинаковыми индексами в каждом измерении).
Я хочу отобразить этот ndarray на новый ndarray, используя карту индекса: пример:
{0 -> 0, 1 -> 2, 3 -> 3, 4 -> нет, 5 -> нет, 6 -> 4}. Карта применяется к каждому измерению.
Я хочу заполнить пустые значения в новом массиве нулями. Я пытался написать это с помощью для l oop, но это слишком медленно. Есть ли способ numpy сделать это? Мой код:
import numpy as np # type: ignore
from typing import Any, List
def transfer_ndarray(m: Any, prev_key: List[str], key: List[str]):
s = m.shape
assert all(l == len(prev_key) for l in s)
new_s = tuple([len(key) for l in s])
r = np.zeros(new_s, dtype=m.dtype)
ix = lambda arr, e: arr.index(e) if e in arr else -1
key_map = {i: ix(key, prev_key[i]) for i in range(len(prev_key))}
for x, e in np.ndenumerate(m):
new_x = tuple(key_map[i] for i in x)
if any(i == -1 for i in new_x):
continue
r[new_x] = e
return r