Юлия эквивалент «логической» матрицы Матлаба - PullRequest
2 голосов
/ 28 октября 2019

Есть ли у Джулии эквивалент для «логической» матрицы Matlab, который вы можете использовать для маркировки определенных позиций в матрице, а затем использовать ее для манипулирования матрицей?

В Matlab это выглядит так:

A=magic(3);
C=eye(size(A));
C=logical(C);
M=A;
M(C)=0;

Мне нужно держать нули на главной диагонали. В Matlab я бы сделал это так, но в Юлии нет «логической» матрицы. Я искал эквивалент Джулии, но ничего не смог найти. Заранее спасибо!

1 Ответ

3 голосов
/ 28 октября 2019

Вы можете создать BitArray или Array из Bool с, которые для большинства намерений и целей совпадают .

Например,

> using LinearAlgebra

>I(3)                            # `I()` is the identity matrix function 
3×3 Diagonal{Bool,Array{Bool,1}}:
 1  ⋅  ⋅
 ⋅  1  ⋅
 ⋅  ⋅  1

И вы можете использовать его для обнуления элементов в другой матрице с помощью широковещательной передачи логического оператора not ~, а затем умножения каждого элемента надругая матрица (передавая * с .*).

Например:

> x = reshape(1:9,3,3)
 1  4  7
 2  5  8
 3  6  9

> x .* .~I(3)
 0  4  7
 2  0  8
 3  6  0
...