Creating a n*2 array from a variable in workspace

2 views (last 30 days)
I have a variable on my workspace, in which i have n*2 elements ( 'n' rows and 2 columns). I wanna create an array to do some computation on all the elemental pairs of that variable, such that x1,y1... How can i do that ???
  4 Comments
madhan ravi
madhan ravi on 30 Jan 2019
for k=1:size(data,1)
somefunction(data(k,:)) %like this ?
end
deep Dhillon
deep Dhillon on 30 Jan 2019
So i am using this function
evalin('base', 'centers')
This brings my variable 'centers' into the command window,, which has n*2 elements(please see the attached image)
What i wanna do is to use each of the values in that centers variable and use each of them to run an entire algorithm on those values. So essentially, with reference to the image.. i would run algorithm on 424.5621 212.4266 (which is like the pair x1,y1) and then algorithm on 551.959 376.5003 ... until algo. on 299.3605 509.6506 as such,, thus on each pair of the variable
variable.PNG

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 2 Feb 2019
Try this and then adapt as needed:
% Creating bounding box at any given x,y
grayImage = imread('moon.tif');
[rows, columns, numberOfColorChannels] = size(grayImage)
imshow(grayImage);
boxHalfWidth = 40; %
xy = boxHalfWidth + rand(10, 2) * (rows - 2 * boxHalfWidth);
for k = 1 : size(xy, 1)
x = xy(k, 1);
y = xy(k, 2);
hold on
plot(x, y, 'r+', 'MarkerSize', 25)
boxXStart = x-boxHalfWidth;
boxYStart = y-boxHalfWidth;
boxWidth = 2 * boxHalfWidth;
boxHeight = 2 * boxHalfWidth;
rectangle('Position',[boxXStart boxYStart boxWidth boxHeight], 'EdgeColor', 'r')
end
0001 Screenshot.png

More Answers (2)

Luna
Luna on 30 Jan 2019
Edited: Luna on 30 Jan 2019
Please read this below:
eval and evalin are not recommended. Why you are not just creating a function that gets your nx2 array as the input variable? And a for loop that gets your array's each row one by one?
For example:
function myOutputs = myAlgorithm(centers)
c = [];
for i = 1:size(centers,1)
x = centers(i,1);
y = centers(i,2);
% do what you want with your x and y and then next iteration x and y will be your next row of your array
c = [c x*y]; % just an example
end
myOutputs = c % just an example
end
  1 Comment
deep Dhillon
deep Dhillon on 1 Feb 2019
Edited: Image Analyst on 2 Feb 2019
Hi Luna
Thanks a lot for the reply
I tried couple of different ways, but i am not able to figure out precisely, how shall i write my function exactly. So indeed what i want to do is that to use all the x,y pairs of the centers variable (on my workspace, which is an n*2 array) and run the following algorithm to create the bounding boxes at those x,y coordinates.
% Creating bounding box at any given x,y
figure, imshow(mush);
hold on
x=425; % center location X
y= 211; % center location y
plot(centers)
boxHalfWidth = 40; %
boxXStart = x-boxHalfWidth;
boxYStart = y-boxHalfWidth;
boxWidth = 2 * boxHalfWidth;
boxHeight = 2 * boxHalfWidth;
rectangle('Position',[boxXStart boxYStart boxWidth boxHeight])
Essentially what i wanna do is that i should be able to input my function with the x,y and in turns it executes the above algorithm for each x,y pair in my center variable

Sign in to comment.


deep Dhillon
deep Dhillon on 2 Feb 2019
Image analyst
It works really well, onto my application.
Greatly appreciate you for the support

Products

Community Treasure Hunt

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

Start Hunting!