октавная матрица для выполнения цикла - PullRequest
0 голосов
/ 08 июля 2011

Я новичок в Октаве.У меня есть две матрицы.Я должен сравнить конкретный столбец одной матрицы с другой (моя матрица A содержит более 5 переменных, аналогично матрица B содержит то же самое.) И если элементы в первом столбце матрицы A равны элементам во второйМатрица B, затем я должен использовать третий столбец второй матрицы B для вычисления определенных значений. Я делаю это с октавой, используя цикл for, но это занимает много времени, чтобы сделать вычисления за один день, я должен сделать этов течение года .Потому что размер матриц очень велик. Пожалуйста, предложите какой-нибудь альтернативный способ, чтобы я мог сократить время и вычисления.Заранее спасибо.

Спасибо за быстрый ответ -hfs продолжение той же проблемы, спасибо, но это будет работать, только если оба элемента в обеих строках равны. Например, мои матрицы такие,

A=[1 2 3;4 5 6;7 8 9;6 9 1]
B=[1 2 4; 4 2 6; 7 5 8;3 8 4]

здесь столбец 1 первого элемента A равен столбцу 1 первого элемента B, даже второму столбцу, поэтому я могу взять третий элемент B, но для второго элемента столбца 1 равен A иB, но второй элемент столбца 2 отличается, здесь он должен найти этот элемент и напечатать элемент в третьем столбце, и я делаю это с циклом for, который очень медленный из-за большего размера. В моей реальной проблеме я далДля цикла, как написано ниже:

for k=1:37651
    for j=1:26018
       if (s(k,1:2)==l(j,1:2))
          z=sin((90-s(k,3))*pi/180) , break ,end

      end
  end 

Я хочу альтернативный способ сделать это, который должен быть быстрее, чем это.

1 Ответ

1 голос
/ 08 июля 2011

Вы должны по возможности работать с полными матрицами или векторами. Вы должны попробовать команды и просмотреть промежуточные результаты в интерактивной оболочке, чтобы увидеть, как они сочетаются друг с другом.

A(:,1)

выбирает первый столбец матрицы. Вы можете сравнить матрицы / векторы, и в результате вы снова получите матрицу / вектор 0/1:

> A(:,1) == B(:,1)
ans =

  1
  1
  0

Если вы присвоите результат, вы можете использовать его снова для index в матрицах:

I = A(:,1) == B(:,1)
B(I, 3)

Выбирает третий столбец B из тех строк, где первый столбец A и B равен.

Надеюсь, это поможет вам начать.

...