shift matrix to the right
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Nimasha Pilippange
el 26 de Feb. de 2022
Comentada: Nimasha Pilippange
el 28 de Feb. de 2022
Hello,
I need to compare 2 matrices. One is 1x1280 and other is 1x5120. So I need to take the 1st one to the other range. How do i do that.
for example: A=[0 0 1 1 0 0 1 1], B=[0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1]. The number of elements in B is an integer multiple of number of elements in A. After shifting I need to subtract A by B.
Any Idea?
7 comentarios
Respuesta aceptada
Image Analyst
el 27 de Feb. de 2022
Try this:
markerSize = 30;
% Say a goes from 250 to 4800 and has 60 elements
a = 250 + (4800-250) * rand(1, 60);
% Say b goes from 100 to 900 and has 30 elements
b = 100 + (900-100) * rand(1, 30);
plot(a, 'b.-', 'LineWidth', 2, 'MarkerSize', markerSize);
hold on;
plot(b, 'c.-', 'LineWidth', 2, 'MarkerSize', markerSize);
grid on;
% Rescale b so that it also goes from 250 to 4800
b = rescale(b, min(a), max(a));
% Interpolate b so that it has the same number of elements as a.
bq = linspace(1, length(b), length(a));
b2 = interp1(b, bq);
plot(b2, 'r.-', 'LineWidth', 2, 'MarkerSize', markerSize);
% Find differences
c1 = a - b2;
c2 = b2 - a;
legend('a', 'b', 'b2')
Más respuestas (3)
Scott MacKenzie
el 26 de Feb. de 2022
Editada: Scott MacKenzie
el 26 de Feb. de 2022
Perhaps this is what you are looking for:
A=[0 0 1 1 0 0 1 1]
B=[0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1]
m = numel(A);
n = numel(B);
Anew(n-m+1:n) = A % shifted to match B with zeros at beginning
0 comentarios
Image Analyst
el 26 de Feb. de 2022
It appears no one knows what you mean since it's not clearly explained and you didn't give the resulting difference vector. So here is another guess:
A=[0 0 1 1 0 0 1 1];
B=[0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1];
% Resize smaller vector to be the same size as the larger vector.
a2 = imresize(A, size(B), 'nearest')
% "subtract A by B" - whatever that means. Here are two possibilities
c = a2 - B
c = B - a2
Let me know if either of these is what you want.
0 comentarios
Voss
el 27 de Feb. de 2022
Maybe use interp1() (or resample()):
nx = 20;
x = randn(1,nx);
% xr = resample(x,4,1);
xr = interp1(1:nx,x,1:0.25:nx);
figure();
plot(1:nx,x,'-o');
hold on
plot(0.25*(4:numel(xr)+3),xr,'.');
legend({'Original','Interpolated x4'})
0 comentarios
Ver también
Categorías
Más información sobre Graphics Performance en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!