【问题标题】:octave vectorize function application八度向量化函数应用
【发布时间】:2013-11-28 09:37:33
【问题描述】:

对于给定的(m×n)矩阵poly我想生成它 带有以下表达式的行:

poly(i, :) = [X(i) X(i)^2 X(i)^3 ... X(i)^p]

我得到一个 (m x 1) X 向量和值 p。 我目前的解决方案是:

poly(:,1) = X;
for i = 2:p
    poly(:,i) = X.^i;
end;

我的问题是:他们有没有办法进一步矢量化? 我还生成了一个可以应用的函数单元数组 逐行到矩阵,但我还是要循环。

TIA

【问题讨论】:

    标签: function octave vectorization apply


    【解决方案1】:

    当然,可以使用(例如)内置辅助函数 one()。

    逐步解决方案:

    poly = ones(size(X,1),p  );
    poly = poly .* X;
    powers = 1:p;
    poly = poly .^ powers;
    

    单线:

    poly = (ones(size(X,1),p) .* X) .^[1:p];
    

    【讨论】:

    • 试过了,对于 X=[1:10^3]' 和 p = 10^3 的循环版本,我的计算机上经过的时间是 2.757 秒。矢量化版本在 0.004 秒内运行,相当快!
    • 我试过你的代码,但它似乎不起作用。请注意,poly 是 (m x n) 的矩阵。列数 n = p + 1,其中所有第一列与 X 相同。X 是 m 乘 1 的向量。虽然它似乎不适合,但它给了我关于使用 repmap 并将结果重塑为的想法一个矩阵。
    • 哦,是的,该代码有效,并为您的算法提供了相同的结果。似乎是什么问题?
    • 并且由于您从 2:p 循环,因此在您的示例中 n 将等于 p...(即不是您上面写的 n = p+1。)
    • 有趣。我尝试了您的两个版本,但出现错误。一定是我这边的输入搞砸了。我得到一个向量,而不是矩阵。是的,你是正确的 n = p。无论如何,我已经重做了这个并且它有效。抱歉,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2020-03-23
    • 2013-07-10
    相关资源
    最近更新 更多