Borrar filtros
Borrar filtros

Subtract each column of matrix until -3 is finished

1 visualización (últimos 30 días)
Chin
Chin el 14 de Dic. de 2011
For example, i have a matrix a = [0 1 2 3 4]. How do I subtract each column by 1?
a = [0 3 2 6 4]
b = [0 2 1 2 3]
remainder = size(a, 2) - sum(b)
The remainder is -3. I need to minus from b when b(i) ~= 0 so that at the end the b = [0 1 0 1 3].
Thank you.

Respuesta aceptada

Fangjun Jiang
Fangjun Jiang el 14 de Dic. de 2011
I am curious too. Let me guess.
a=0:4;
b=-3; % b is an integer, positive or negative
c=zeros(size(a));
ind=find(a,1);
c(ind:ind+abs(b)-1)=-1;
a=a+c
a =
0 0 1 2 4
Updated for a generic solution
b = [0 2 1 2 3]
remainder=-6;
ind=find(b);
while remainder<0 && ~isempty(ind)
if length(ind)<=abs(remainder)
b(ind)=b(ind)-1
remainder=remainder+length(ind)
ind=find(b);
else
for k=1:abs(remainder)
b(ind(k))=b(ind(k))-1
remainder=remainder+1
end
end
end
b =
0 2 1 2 3
b =
0 1 0 1 2
remainder =
-2
b =
0 0 0 1 2
remainder =
-1
b =
0 0 0 0 2
remainder =
0
  9 comentarios
Fangjun Jiang
Fangjun Jiang el 16 de Dic. de 2011
I am confused with the c and a. I suggest you ask a separate question and use variable name consistently. Also, explain the logic or step. If it's hard to explain, try to show your step and intermediate result if you do it manually, like using a pencil and a piece of paper.
Chin
Chin el 16 de Dic. de 2011
ok. thanks. i will ask in another question.

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 14 de Dic. de 2011
Does the minus sign of -3 indicate the third from the start or the third from the end? Your example is ambiguous about that.
Third from the start:
a(1:abs(b)) = a(1:abs(b)) - 1;
Third from the end:
a(1:end-abs(b)+1) = a(1:end-abs(b)+1) - 1;
  2 comentarios
Fangjun Jiang
Fangjun Jiang el 14 de Dic. de 2011
The result are all wrong though!
Walter Roberson
Walter Roberson el 14 de Dic. de 2011
ind = find(a);
ind = ind(1:abs(b));
a(ind) = a(ind) - 1;

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by