gpt4 book ai didi

matlab - 从对象数组中获取最小属性值

转载 作者:太空宇宙 更新时间:2023-11-03 20:19:26 25 4
gpt4 key购买 nike

如果这是一个愚蠢的问题,我深表歉意,我是 Matlab 的新手。

我有一个 Rectangle 类的矩形数组,其属性 minx, miny, maxx, maxy 表示角坐标。

我正在尝试获取数组中左上角矩形的索引。

我可以遍历对象以获得对应于最小 x 和 y 坐标的对象,但这似乎不是一种非常 matlabic(matlabian?听起来不如 pythonic 好)的方法.

minx = -1
miny = -1
tl_rect_id = 0

for id = 1:num_objects
if ((rectangles(id).minx < minx || minx == -1) && (rectangles(id).miny < miny || miny == -1))
tl_rect_id = id
minx = rectangles(id).minx
miny = rectangles(id).miny

end

% plot coordinates of top left corners
plot(rectangles(id).minx,rectangles(id).miny,'+r')
end

最佳答案

您不需要使用 arrayfun 来操作 matlab 中的对象数组。从对象数组中获取属性数组有一个非常有用的速记:

[rectangles.minx]

这会在一个数组中生成所有矩形的 minx

所以要知道哪个点最接近原点,我会计算到原点的欧式距离。有了向量,这真的很简单。

欧氏距离定义如下:

d(a,b) = sqrt( (a.x - b.x)^2 + (a.y - b.y)^2);

用你的向量计算它:

distances = sqrt([rectangles.minx].^2 + [rectangles.miny].^2)

这将产生一个包含所有点距离的向量。找到最小值很简单:

[~, idx] = min(距离);

min函数返回一个1x2的数组,第一个位置是最小值,第二个是索引。我使用 matlab 符号 [~, idx] 来声明我对第一个返回值不感兴趣,第二个应该存储在变量 idx 中.

我已经编写了一个示例,其中我创建了我的矩形类只是为了测试它,但它也适用于您的类。下面是我定义的类的代码以及计算最接近 (0,0) 的点的代码。

运行它来发挥这个想法并根据您的需要进行调整:)

测试类定义(保存在名为 Rectangle.m 的文件中):

classdef Rectangle
properties
minx;
miny;
end
methods
function obj = Rectangle(v1,v2)
if nargin > 1
obj.minx = v1;
obj.miny = v2;
end
end
end
end

代码

clear all;
numRect = 100;
rect_array = Rectangle(numRect);

% initialize rectangles
for n=1:numRect
r = Rectangle;
r.minx = 100*rand(1,1);
r.miny = 100*rand(1,1);
rect_array(n) = r;
end

% find point closest to the origin

[~, idx] = min(sqrt([rect_array.minx].^2 + [rect_array.miny].^2));

close all;
figure;
% plot the points in blue
plot([rect_array.minx],[rect_array.miny],'b.');
hold on;
% mark a red cross on the point closest to the origin
plot(rect_array(idx).minx, rect_array(idx).miny, 'rx');

关于matlab - 从对象数组中获取最小属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10055673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com