【问题标题】:Doing operations between subsequent elements without using a FOR loop?在不使用 FOR 循环的情况下在后续元素之间进行操作?
【发布时间】:2013-07-15 15:43:31
【问题描述】:

在 Matlab 中,是否可以在不使用 for 循环的情况下在数组的后续元素之间进行简单的操作?类似于diff()。例如,我有这个向量:

A = [2 4 8 16 32]

我希望每个元素都被它的前任分割:

ans = [2 2 2 2]

如何在不遍历所有元素(不使用循环)的情况下做到这一点?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    如果您使用./ 运算符而不是/,则可以使用Matlab 中的除法对标量和矩阵都起作用的事实

    >> A = [2 4 8 16 32];
    >> A(2:end) ./ A(1:end-1)
    ans =
         2     2     2     2
    

    关于您关于在矩阵行中存储的向量之间执行dot() 的问题。 dot() 有一个附加参数,告诉它您的向量是存储在列(默认)还是行中;

    >> x = rand(3);
    >> y = rand(3);  # random vectors
    >> dot(x,y)      # dot product of column vectors
    ans =
        0.5504    0.5561    0.5615
    >> dot(x,y,2)    # dot product of row vectors
    ans =
        0.3170
        1.0938
        0.2572
    

    Matlab 中的大多数函数都是矢量化的,因此它们可以处理标量、向量和矩阵,但有时您需要阅读文档(例如键入 help dot)来了解如何使用它们。

    【讨论】:

    • 感谢您的快速答复!我知道矢量化操作,但索引部分有点棘手。
    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 2020-02-26
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多