shift matrix to the right

7 ビュー (過去 30 日間)
Nimasha Pilippange
Nimasha Pilippange 2022 年 2 月 26 日
コメント済み: Nimasha Pilippange 2022 年 2 月 28 日
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 件のコメント
Nimasha Pilippange
Nimasha Pilippange 2022 年 2 月 27 日
Yes I think we need scaling too. Once I get both the data in one range I need to susbstrat one from another. I attached the images again. Let me know if there is any more detail you need.
Image Analyst
Image Analyst 2022 年 2 月 27 日
You forgot to answer my question. Which is it: 1 or 2?

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2022 年 2 月 27 日
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')
  1 件のコメント
Nimasha Pilippange
Nimasha Pilippange 2022 年 2 月 28 日
I used this and it seems working. Thank you very much

サインインしてコメントする。

その他の回答 (3 件)

Scott MacKenzie
Scott MacKenzie 2022 年 2 月 26 日
編集済み: Scott MacKenzie 2022 年 2 月 26 日
Perhaps this is what you are looking for:
A=[0 0 1 1 0 0 1 1]
A = 1×8
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]
B = 1×16
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
Anew = 1×16
0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1

Image Analyst
Image Analyst 2022 年 2 月 26 日
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.

Voss
Voss 2022 年 2 月 27 日
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'})

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by