我有一个定义的函数(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输出
答案 0 :(得分:3)
您必须编写该函数,以便它可以处理nx2x4的矩阵。如果它确实做了一些微不足道的事情,那就不应该太难了。如果您遇到任何问题,可以在此处发布并寻求帮助。
修改强>
sum是一个适用于矩阵的函数,所以你可以通过对矩阵求和并使用维度来实现你想要的效果。你根本不需要这个功能:
sum(bookSizeHistory(2:4, 1:2, :))
在第一维上求和(就像你在函数中做的那样),所以假设bookSizeHistory
的大小是Kx2xN,这个和的输出是1x2xN。您可以根据需要添加permute to rearrange the dimensions:
permute(sum(bookSizeHistory(2:4, 1:2, :)), [2 1 3])
应该能满足您的需求。
答案 1 :(得分: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),则总和(A)将给出每列的总和。总和可以通过几种不同的方式找到:
A_temp=reshape(A,[1,8]);
B=sum(A_temp);
或
A=sum(sum(A));
sum命令中可能还有一些其他功能允许使用一些额外的参数进行单个调用,但这仍然是一种非常快速的方法。