логика для настройки максимального числа в массиве до минимального числа во втором массиве - PullRequest
0 голосов
/ 27 апреля 2011

Привет всем

логика для настройки максимального числа в массиве на минимальное число во втором массиве

У меня есть массив "A"

A=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1]

И я хочу, чтобы второй массив шел в «противоположном» направлении, поэтому, когда числа в массиве «А» идут высокими, числа в массиве «В» должны быть низкими

пример того, как должен выглядеть массив "B" (и снова A для справки)

B=[1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1 0 .1 .2 .3 .4 .5 .6 .7 .8 .9]
A=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1]

Я пытался использовать эту логику, но она, конечно, делает все положительным

arrayB=-abs(arrayA).+abs(max(arrayA));

но это не сработало, я использую matlab, но если кто-то знает правильную логику, я могу преобразовать ее через синтаксис matlab

ТИА

Числа представляют разные амплитуды сигнала, поэтому, когда амплитуда одного массива сигналов A возрастает, массив других сигналов B должен уменьшаться. Есть "перекрытие"

Ответы [ 4 ]

0 голосов
/ 27 апреля 2011

Это также создаст правильный ответ

A=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1]';

B=circshift(A,30)
0 голосов
/ 27 апреля 2011

Следующий код делает более или менее то, что вы хотите?

Ad = diff(A);
B = cumsum([max(A) -Ad]);
0 голосов
/ 27 апреля 2011

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

B = max(A)-cumsum([0 abs(diff(A))].*sign(A+eps));

Находит абсолютные различия в значениях вдоль массива A, умножает эти различия на знак элементов A (считая 0 как положительное, добавляя EPS к сигналу), получает совокупную сумму этих значений, а затем вычитает их из максимального значения в A.

Другое решение в этом случае - просто создать круговое смещение A, используя индексирование массива .Например, смещение массива A таким образом, чтобы его максимальное значение находилось в начале массива, даст вам нужный массив B:

[~,maxIndex] = max(A);
B = A([maxIndex:end 1:maxIndex-1]);
0 голосов
/ 27 апреля 2011

Rick

Это так просто, как B [i] = 1 - abs (A [i]) ... или я что-то упустил?

Негативы вскоре перестают выстраиваться, что затрудняет просмотр отношений.

Приветствия. Кит.


РЕДАКТИРОВАТЬ: Нет, это не так просто!

Не существует "обычного вычисления", которое дало бы эти результаты.

Все хорошо, пока мы не доберемся до .1 0 -.1 ... который производит -.9 -1 -.9

Полагаю, вам придется «пройти через это» к 10 секундам, меняя знак результата после каждых 10.

A=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1  .9  .8  .7  .6  .5  .4  .3  .2  .1  0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1]
B=[1 .9 .8 .7 .6 .5 .4 .3 .2 .1 0 -.1 -.2 -.3 -.4 -.5 -.6 -.7 -.8 -.9 -1 -.9 -.8 -.7 -.6 -.5 -.4 -.3 -.2 -.1  0  .1  .2  .3  .4  .5  .6  .7  .8  .9]

Это имеет ЛЮБОЙ смысл? Вы можете понять, почему я не занимался математикой высшего уровня.

Приветствия. Кит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...