【问题标题】:Evenly spaced numbers between two sets (Vectorize LINSPACE) - MATLAB两组之间均匀间隔的数字(向量化 LINSPACE) - MATLAB
【发布时间】:2015-03-13 14:00:15
【问题描述】:

ab是向量或集合时,如何根据M=[a:(b-a)/5:b](从ab分5步)定义矩阵M;更具体地说,M 中的每一行 i 的第一个值应等于 a(i) 和最后一个值 b(i),并且在这之间有 5 个相等的步长。

例如,如果我有

a = [0;     b = [10;
     0];         20]; 

我想生成一个矩阵M 的形式

[0 2 4  6  8 10;...
 0 4 8 12 16 20]

我知道如何使用循环来做到这一点,但我正在寻找没有的解决方案。我该怎么做?

【问题讨论】:

  • 所以你想向量化linspace的概念?

标签: matlab matrix vector vectorization


【解决方案1】:

一个vectorized 方法与bsxfun -

steps = 5                               %// number of steps
M = bsxfun(@plus,((b(:)-a(:))./(steps-1))*[0:steps-1],a(:))

示例运行 -

a =
     2
     3
b =
    18
    23
M =
     2     6    10    14    18
     3     8    13    18    23

【讨论】:

    【解决方案2】:

    这是一种使用arrayfun 的方法(比@Divakar 的bsxfun 解决方案慢),但只是为了它:

    clear
    clc
    
    a=[0;0];
    b=[10;20];
    
    %// Customize the stepsize
    Step = 5;
    
    M = cell2mat(arrayfun(@(a,b) (a:(b-a)/Step:b), a,b,'uni',false))
    
    M =
    
         0     2     4     6     8    10
         0     4     8    12    16    20
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-06-01
      相关资源
      最近更新 更多