2016-07-24 2 views
2

Пусть c - это 2D-массив, а x и y - 1D массивы одинаковой длины (например, давайте будем иметь x=1:7 и y=3:9).MATLAB: как пройти по диагонали матрицы в качестве аргумента в другой матрице?

Мне нужно найти способ передать аргументы от x и y так, как я опишу ниже.

Если я ставлю просто c(x,y), он даст матрицу 7 на 7. Я не хочу этого.
Вместо этого, я хочу перейти по диагонали матрицы [x y]: ((x(1), y(1)), (x(2), y(2))...(x(7), y(7)). Есть ли способ сделать это без цикла for или любого итеративного утверждения?

ответ

1

Там более простой способ. Если вы ищете диагональ, используйте diag. Если у вас есть матрица c:

c = 

    5 8 4 2 9 1 6 1 1 
    9 8 7 5 9 3 2 7 5 
    2 3 9 10 2 1 4 2 2 
    3 2 9 2 4 4 7 2 4 
    3 9 10 8 7 5 2 1 8 
    5 6 3 7 6 1 10 5 2 
    6 1 7 3 10 8 2 4 2 

вы можете найти на главной диагонали с помощью diag без дополнительных аргументов:

>> diag(c) 
ans = 

    5 
    8 
    9 
    2 
    7 
    1 
    2 

Второй аргумент, однако, указывает на который диагонали вы хотите как смещение от главной диагонали. Таким образом, диагональ по умолчанию равна 0. Если вы хотите диагональный старт в c(1,3), это 2выше главной диагональ, так

>> diag(c,2) 
ans = 

    4 
    5 
    2 
    4 
    2 
    5 
    2 

Точно так же, если вы хотите диагональный пуск двигателя при c(4,1), смещении -3:

>> diag(c,-3) 
ans = 

    3 
    9 
    3 
    3 
Смежные вопросы