让Y是长度的矢量N,从包含数字1到10.作为示例代码,您可以使用:
Y = vec(1:10);
Run Code Online (Sandbox Code Playgroud)
我正在编写必须创建N x 10矩阵的代码,每行由全零组成,除了1仅在与向量中的数字对应的位置Y.因此,1在Y变10000000000,3变0010000000,等等.
这种方法有效:
cell2mat(arrayfun(@(x)eye(10)(x,:), Y, 'UniformOutput', false))
Run Code Online (Sandbox Code Playgroud)
我的下一个想法是"优化",所以eye(10)不是生成N时间,我写了这个:
theEye = eye(10);
cell2mat(arrayfun(@(x)theEye(x,:), Y, 'UniformOutput', false))
Run Code Online (Sandbox Code Playgroud)
但是,现在Octave给了我错误:
error: can't perform indexing operations for diagonal matrix type
error: evaluating argument list element number 1
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误?怎么了?
奖金问题 - 您是否看到了更好的方式来做我正在做的事情?我是否尝试优化Octave的制作工作?