Как преобразовать numpy ndarray, используя карту индекса - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть 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
...