【发布时间】:2021-03-10 20:17:59
【问题描述】:
我想对一些数据进行矢量化 ifelse/merge 操作。为了避免不必要的比较,我想只调用一次 ifelse 命令来获得结果。这是我的示例代码:
aaa = [90 80 70 60];
bbb = [10 15 20 30];
ccc = [ 0 3 6 9];
res = ifelse(ccc > 5, {[aaa bbb]}, {[aaa*-1 bbb*-1]})
由于我可以使用元胞数组运行 ifelse 命令,我得到的重复结果如下:
{
[1,1] = -90 -80 -70 -60 -10 -15 -20 -30
[1,2] = -90 -80 -70 -60 -10 -15 -20 -30
[1,3] = 90 80 70 60 10 15 20 30
[1,4] = 90 80 70 60 10 15 20 30
}
但是,我想要的 ifelse 命令的结果如下:
[-90 -80 70 60]
[-10 -15 20 30]
其实我可以通过两次调用ifelse命令来实现,如下:
res1 = ifelse(ccc > 5, aaa, aaa*-1)
res2 = ifelse(ccc > 5, bbb, bbb*-1)
但是,我不想调用它两次,因为两者的掩码是相同的。那么,是否有一种方法可以在 Octave 或 Matlab 中通过一次调用 ifelse 命令来获得此结果?
【问题讨论】:
标签: matlab if-statement merge vectorization octave