问候所有
用于将数组中的最大数量调整为第二个数组中的最小数量的逻辑
我有一个数组“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]
我希望第二个数组朝着“相反”的方向前进,所以当数组“A”中的数字变高时,数组“B”中的数字应该变低
数组“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语法转换它
TIA
数字表示信号的不同幅度,因此当一个信号阵列A的幅度上升时,另一个信号阵列B应该下降。有“重叠”
答案 0 :(得分:0)
瑞克,
是否像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]
这有什么意义吗?你可以看出为什么我没有做更高级别的数学。
干杯。基思。
答案 1 :(得分:0)
以下代码是否或多或少地符合您的要求?
Ad = diff(A);
B = cumsum([max(A) -Ad]);
答案 2 :(得分:0)
您的标题和说明非常令人困惑,我无法告诉他们您要做什么。但是,查看要从输入数组B
生成的所需输出数组A
,我可以为您提供一些操作,为您进行转换:
B = max(A)-cumsum([0 abs(diff(A))].*sign(A+eps));
这会在数组A
的值中找到absolute differences,将这些差异乘以A
元素的sign(将0视为正数)通过向信号添加EPS,获取这些值的cumulative sum,然后从A
中的maximum value中减去它们。
在这种情况下,另一种解决方案就是使用array indexing创建A
的循环移位。例如,移动数组A
使其最大值位于数组的开头将为您提供所需的数组B
:
[~,maxIndex] = max(A);
B = A([maxIndex:end 1:maxIndex-1]);
答案 3 :(得分:0)
这也将创建正确的答案
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)