Ссылка на текущую строку при расширении матрицы - PullRequest
0 голосов
/ 11 февраля 2019

Как обратиться к текущей строке в поэлементной операции, включающей матрицу.Это было бы аналогично указателю this в C ++.

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

Например:

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

Я хочу, чтобы 'C' содержал второй столбец, который содержит количество всех элементов меньше, чем соответствующий элемент строки в A. Примерно так:

C = 
 1  0
 2  0
 3  1
 4  2
 5  3
 6  4
 7  5
 8  5
 9  5
 10  5

Я подумал, что это можно сделать, используя сравнение масштабирующих векторов и суммирование по результатам (т.е. sum(B<A)).Это не работает:

>> C = [A, sum(B<A)]
error: mx_el_lt: nonconformant arguments (op1 is 5x1, op2 is 10x1)

Здесь интерпретатор октавы обрабатывает A (внутри оператора A<B) как вектор.Мне непонятно, почему это так, поскольку что-то вроде следующих строк кода работает, как и ожидалось (то есть октава обрабатывает A как элемент масштабирования в текущей строке):

>> D = [A, A + 5];
D =
    1    6
    2    7
    3    8
    4    9
    5   10
    6   11
    7   12
    8   13
    9   14
   10   15

Вопрос: Как правильно выполнить эту задачу?что я делаю?Есть ли способ ссылаться на «переменную текущей строки» в элементарных выражениях (то есть что-то вроде C = [A, sum (B)

1 Ответ

0 голосов
/ 11 февраля 2019

Вы были почти там, но, как упомянул @Guille, это не сработает, потому что у вас есть два вектора разных измерений.Однако вы можете создать Матрицу из этих значений, которая будет сравнивать каждое значение A («текущая строка») с B:

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

C=[A sum(B'<A,2)];  %B'<A creates a 5x10 matrix and ',2' in sum adds up rowwise
...