所以我遇到了这个模拟面试问题,我必须在不使用函数repelem或repmat的情况下找到该问题的解决方案。
格式只允许3行代码:(每行只允许一个=运算符)
p = ...,q1 = ....,q2 = ....,
到目前为止,我只获得了使用repelem的解决方案,但是当我尝试更改代码时,索引时总是必须使用更多的代码行。非常感谢您给我的任何提示:)
p=[4 2 5 3 1]
q1 = repelem((1:length(p)),p)
q2 = repelem(p,p)
这是一个问题,如果有人想自己尝试(为MATLAB设计,但可以在任何地方完成)
让p是具有k个不同的正整数元素且s = sum(p)的向量。必须确定两个向量q1和q2:
•q1是长度为s的向量。 q1的前p(1)个元素等于1,接下来的p(2)个元素等于2,...。 。 。 ,最后p(k)个元素等于k。
•q2是长度为s的向量。 q2的前p(1)个元素等于p(1),接下来的p(2)个元素等于p(2),...。 。 。 ,最后的p(k)个元素等于p(k)。
答案 0 :(得分:2)
这是 Matlab 中的解决方案。
提示:
bsxfun
)和nonzeros
构建q1
。q2
和p
很容易获得q1
。代码(请先尝试一下!):
p = [4 2 5 3 1]; % example input
q1 = nonzeros(((1:max(p)).'<=p).*(1:numel(p))).';
q2 = p(q1);
答案 1 :(得分:1)
通过电话输入此内容,因此不确定语法是否正确。
使用列表理解,我们可以将列表的列表展平,并使用[x] * y创建一个重复x y次的列表。
q1 = [e for l in [[i+1]*px for i,px in enumerate(p)] for e in l]
确定q2相似吗?