0

我定义了一个函数(GetDepth),它做一些相当简单的事情,例如接受一个 2x4 矩阵并输出一个 2x1 矩阵。然后我有一个 2x4xn 矩阵我想将它应用到,我期待一个 2x1xn 矩阵结果。

在不使用循环的情况下将我的函数应用于矩阵的正确语法是什么?

编。根据要求,这是我正在尝试做的事情的一个例子:

function [bidWSize, askWSize] = getWSizes(m, bookSizeHistory)
    bidWSize = sum(bookSizeHistory(2:4, 1, m));
    askWSize = sum(bookSizeHistory(2:4, 2, m));
end

目前,我正在循环并输入 2x1xn 输出

4

2 回答 2

3

您必须编写函数以便它可以处理 nx2x4 的矩阵。如果它确实做了一些微不足道的事情,那应该不会太难。如果您对此有任何问题,可以在此处发布并寻求帮助。

编辑:

sum 是一个适用于矩阵的函数,因此您可以通过对矩阵求和并使用维度来实现您想要的。你根本不需要这个功能:

sum(bookSizeHistory(2:4, 1:2, :))

在第一个维度上求和(就像你在函数中所做的那样),所以假设bookSizeHistory的大小是 Kx2xN,这个和的输出是 1x2xN。您可以根据需要添加置换以重新排列尺寸

permute(sum(bookSizeHistory(2:4, 1:2, :)), [2 1 3])

应该给你你需要的。

于 2010-02-10T18:06:55.480 回答
1

您可以使用“.”对单个元素执行功能。操作员。例如,将每个元素发挥作用,您将使用:

C=A.^B;

代替:

[rows,cols]=size(A);
for i=1:rows
    for j=1:cols
        C=A(i,j)^B;
    end
end

与具有相同结果的循环相比,这提供了更短的代码。它通常被称为“矢量化”代码,它利用了 BLAS 函数。否则,Matlab 更像是一种解释型语言,速度要慢得多。其他函数对数组中的所有行或列执行操作。如果 A 是二维数组 (2,4),则 sum(A) 将给出每列的总和。可以通过几种不同的方式找到总和:

A_temp=reshape(A,[1,8]);
B=sum(A_temp);

或者

A=sum(sum(A));

sum 命令中可能还有其他一些功能,允许通过带有一些额外参数的单个调用来完成此操作,但这仍然是一种相当快速的方法。

于 2010-02-10T23:18:50.760 回答