Numpy эквивалент логической операции над многомерными массивами в MATLAB - PullRequest
0 голосов
/ 21 марта 2019

У меня есть следующая логическая операция, закодированная в MATLAB, где [A, B, C и D] - все двойные 5x3x16, а [a, b, c и d] - двойные 240x1.Я пытаюсь реализовать ту же логическую операцию в Python, используя Numpy.

D = zeros(size(A)); 
for i = 1:numel(D)
    flag = ...
        (a == A(i)) & ...
        (b == B(i)) & ...
        (c == C(i));
    D(i) = d(flag);
end

d - это вектор столбца, который уже заполнен данными.a, b и c также являются заполненными векторами столбцов одинакового размера.Сетка Meshgrid использовалась для построения A, B и C в сетке LxMxN с уникальными значениями в пределах a, b и c.Теперь я хочу использовать d, чтобы заполнить LxMxN D соответствующими значениями, используя логическое выражение.

Я пробовал:

D= np.zeros(np.shape(N))
for i in range(len(D)):

    for j in range(len(D[0])):

        for k in range(len(D[0][0])):    
            flag = np.logical_and(                                  
                (a == A[i][j][k]),              
                (b == B[i][j][k]),        
                (c == C[i][j][k])
                )
            D[i][j][k] = d[flag];

1 Ответ

1 голос
/ 21 марта 2019

Синтаксис будет немного сложнее, но вы можете использовать для этого функции np.logical_*.

...