【问题标题】:Where I am making mistake in this matlab programme?我在这个 matlab 程序中哪里出错了?
【发布时间】:2025-11-15 04:15:01
【问题描述】:

X_new 的大小为5000x1yedge1x50N1x49

现在,我正在尝试运行以下程序:

for i=1:50  
    new = find(X_new>yedge, 1, 'last');
    N(new) = N(new)+1; 
end

但出现以下错误“矩阵尺寸必须一致”这是什么,我该如何解决这个问题..?

【问题讨论】:

  • 我认为您只能将两个相同大小的矩阵或矩阵元素与一个数字进行比较。你想用什么逻辑来比较 5000x1 向量和 1x5 向量?
  • 好吧 5000x1 是我的数据,1x50(不是 1x5)是我的 bin 边缘,所以基本上借助 binedge 值,我想找出我的数据来自哪个 bin。就像我想做元素明智的操作。它适用于单个数据,但不适用于不同的数据。
  • 如果将X_new>yedge 更改为X_new>yedge(ii) 假设循环定义为for ii=1:length(yedge),会发生什么情况。 ij 是虚数单位,所以小心覆盖它们。
  • 为什么不使用discretize
  • 不要在 cmets 中发布代码块,edit 你的问题。

标签: arrays matlab sorting matrix


【解决方案1】:

如果您不需要重新发明*,MATLAB 的 discretize 内置返回 bin 索引:

X = 1:10;
yedge = [0 4 8 10];

binidx = discretize(X, yedge);

返回:

binidx =

     1     1     1     2     2     2     2     3     3     3

discretize 是在 R2015a 中引入的,但旧版本的 MATLAB 有histc

X = 1:10;
yedge = [0 4 8 10];

[~, binidx] = histc(X, yedge);

返回:

binidx =

     1     1     1     2     2     2     2     3     3     4

请注意,discretizehistc 定义它们的 bin 的方式不同。 discretize,默认情况下,包括左边的 bin 边缘,除了最后一个 bin,它包括两个 bin 边缘。 histc 包括左边缘,但不包括右边缘。最后一个 bin 由等于 yedge 中最后一个值的标量值组成。

【讨论】:

    最近更新 更多