【问题标题】:Combine odd and even indexes of two array columns in matlab / octave在matlab / octave中组合两个数组列的奇数和偶数索引
【发布时间】:2014-12-01 12:17:15
【问题描述】:

我有一个包含两列的数组 (b) 我想将第二列的偶数索引的数据与第一列的奇数索引的数据结合起来。
PS:数字不会是线性的,所以我不能使用 linspace 命令,这只是一个例子。

a1=[1;2;3;4;5]
a2=[1.5;2.5;3.5;4.5;5.5]
b=[a1,a2]

b array:
1.0000   1.5000
2.0000   2.5000
3.0000   3.5000
4.0000   4.5000
5.0000   5.5000

Final output below I'm trying to get:
1
2.5
3
4.5
5

【问题讨论】:

  • 出于好奇,最终输出包含排序后的数字?
  • @tashuhka 该示例看起来确实已排序,但我用粗体表示“数字不会是线性的,所以我不能使用 linspace 命令”我试图使示例尽可能简单,也许我让它变得简单。下次我将使用随机数

标签: arrays matlab octave


【解决方案1】:

怎么样:

[nb_rows,nb_cols] = size(b);
c = zeros(nb_rows,1);
c(1:2:end) = b(1:2:end,1);
c(2:2:end) = b(2:2:end,2);

【讨论】:

    【解决方案2】:

    这处理a1(和a2)中元素个数为奇数或偶数的情况:

    c = b.'; %'//
    n = numel(a1);
    ind = bsxfun(@plus, [1;4], 0:4:2*n-1);
    result = c(ind(1:n)).';
    

    【讨论】:

      【解决方案3】:

      您可以组合两个向量(奇数和偶数),然后对它们进行排序:

      c = sort([a1(1:2:end); a2(2:2:end)])
      

      【讨论】:

      • a1a2 不一定是排序的,所以这会改变结果中的元素顺序
      • OP 在哪里明确表示向量未排序?我实际上认为它们是排序的,因为 OP 评论说想要使用 linspace(),它创建一个有序向量,但没有因为数字不是线性间隔的。无论如何,我的假设可能是错误的,也可能不是。但在不确定的情况下,必须由 OP 来澄清问题。
      • 当提问者没有说输入满足某个限制(正在排序)时,明智的做法是假设它们不一定满足它。例如,假设这些值都是0.5 的倍数也没有保证
      猜你喜欢
      • 2019-06-27
      • 1970-01-01
      • 2012-09-06
      • 2020-01-03
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多