Как преобразовать массив в матрицу в Юлии - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу выбрать col из A (5 * 7), чей индекс находится в C, и вычислить его обратное. Однако B здесь - это массив 5 * 1, а не квадратная матрица. Как мне этого добиться?

A = [1 2 1 0 0 0 0;
    1/3 1 0 1 0 0 0;
     4  1 0 0 1 0 0;
     -4 2 0 0 0 1 0;
     -6 2 0 0 0 0 1]
C = [3 4 5 6 7]'

B = [A[:,i] for i in C]
x = inv(B)*b

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

В качестве альтернативы тому, что предлагает Ultima Ratio, вы можете просто написать:

B = A[:, C]

(чтобы это работало C должен быть вектор-столбец)

Дополнительно в этом случае это будетлучше просто определить C как:

C = 3:7

или

C = [3,4,5,6,7]

РЕДАКТИРОВАТЬ : В вашем коде:

C = [3 4 5 6 7]'

isматрица 5x1 не вектор.Чтобы преобразовать его в вектор, напишите vec(C).Так что A[:, vec(C)] даст вам матрицу.

0 голосов
/ 13 ноября 2018
  1. b не определено.Что это такое?
  2. B работает по вектору предполагаемого среза: C = vec([3 4 5 6 7])
  3. , затем создайте массив 5x5 с размерами 5x5: B = [A[y,i] for i in C,y in 1:5]
  4. обратныйматрица B (которая идентична себе в этом примере), умноженная на (маленькую) b, должна работать.мой ответ:
julia> B = [A[y,i] for i in C,y in 1:5]
5×5 Array{Float64,2}:
 1.0  0.0  0.0  0.0  0.0
 0.0  1.0  0.0  0.0  0.0
 0.0  0.0  1.0  0.0  0.0
 0.0  0.0  0.0  1.0  0.0
 0.0  0.0  0.0  0.0  1.0

julia> x=inv(B)
5×5 Array{Float64,2}:
 1.0  0.0  0.0  0.0  0.0
 0.0  1.0  0.0  0.0  0.0
 0.0  0.0  1.0  0.0  0.0
 0.0  0.0  0.0  1.0  0.0
 0.0  0.0  0.0  0.0  1.0
...