gpt4 book ai didi

matlab - 在 MATLAB 中将 2D 坐标分类到 bin 中

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

我正在尝试使用 MATLAB 将二维笛卡尔网格上的随机坐标分类到由网格定义的“容器”中。

例如,如果我有一个 X 范围从 [-1,1] 和 Y 从 [-1,1] 范围内的二维域,并且我在该域内生成一些随机坐标,我如何“计算”有多少坐标落在进入每个象限?

我意识到 for 和 if 语句可用于确定每个坐标是否在象限内,但我想将其扩展到具有超过 4 个象限的更大的正方形网格。

我们将不胜感激任何简洁高效的方法!

最佳答案

以下是改编自 the code I mentioned 的示例.

生成的合并点存储在变量 subs 中;每行包含分配了一个点的 bin 的 2d 下标索引。

% 2D points, both coordinates in the range [-1,1]
XY = rand(1000,2)*2 - 1;

% define equal-sized bins that divide the [-1,1] grid into 10x10 quadrants
mn = [-1 -1]; mx = [1 1]; % mn = min(XY); mx = max(XY);
N = 10;
edges = linspace(mn(1), mx(1), N+1);

% map points to bins
% We fix HISTC handling of last edge, so the intervals become:
% [-1, -0.8), [-0.8, -0.6), ..., [0.6, 0.8), [0.8, 1]
% (note the last interval is closed on the right side)
[~,subs] = histc(XY, edges, 1);
subs(subs==N+1) = N;

% 2D histogram of bins count
H = accumarray(subs, 1, [N N]);

% plot histogram
imagesc(H.'); axis image xy
set(gca, 'TickDir','out')
colormap gray; colorbar
xlabel('X'); ylabel('Y')

% show bin intervals
ticks = (0:N)+0.5;
labels = strtrim(cellstr(num2str(edges(:),'%g')));
set(gca, 'XTick',ticks, 'XTickLabel',labels, ...
'YTick',ticks, 'YTickLabel',labels)

% plot 2D points on top, correctly scaled from [-1,1] to [0,N]+0.5
XY2 = bsxfun(@rdivide, bsxfun(@minus, XY, mn), mx-mn) * N + 0.5;
line(XY2(:,1), XY2(:,2), 'LineStyle','none', 'Marker','.', 'Color','r')

2d_bins

关于matlab - 在 MATLAB 中将 2D 坐标分类到 bin 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24443370/

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