2014-11-03 22 views
0

我目前正在使用Matlab函数进行实验。基本上我试图执行上以矩阵中发现的每个值的函数,如下面的简单示例:对每个矩阵值执行一个函数

k = [1:100]; 
p = [45 60 98 100; 46 65 98 20; 47 65 96 50]; 
p(find(p)) = getSum(k, find(p), find(p) + 1); 

function x = getSum(k, f, g, h) 
x = sum(k(f:g)); 
end 

为什么对应的输出矩阵值是所有3个,在为什么所有索引取决于第一换句话说计算的总和?

的输出是下面的:

p = 

    3  3  3  3 
    3  3  3  3 
    3  3  3  3 
+0

您正在为你的'p'矩阵中的所有元素分配一个标量('getSum'函数的输出)的标量。 – 2014-11-03 19:59:17

+1

你想计算什么?看起来,你有一个4x4的k(1:100)。你想总结什么? – chappjc 2014-11-03 20:16:18

+0

这只是一个例子来说明为索引任意数组的主要目的而将参数传递给函数的问题。我的主要目标不是执行总和,而是要实际找到一种合适的方式,通过这种方式我可以根据函数参数对数组进行索引,然后应用相应的结果(每次索引后获得的结果(在此情况下为总和)到每个矩阵单元。 – Bran 2014-11-03 20:30:24

回答

2

f:g返回f(1,1)g(1,1),所以1:2之间的值。

find(p)返回非零值的索引。由于所有的值都是非零的,你可以得到所有的指数。

因此,如果我们打破声明p(find(p)) = getSum(k, find(p), fin(p) + 1)

我们得到

find(p) = 1:12 

然后我们得到 f = 1:12g = 2:13这导致k = 1:2(如上所述)

终于sum(1:2) = 3

此值适用在p(1:12),这是相同的p(:,:)(所有矩阵)

+0

感谢您的解释。然而,是否有任何其他方式可以计算这样的问题(即将参数传递给依赖于当前矩阵位置的函数,这将用于索引)?请注意,这是一个简单的例子,以便说明将参数传递给用于索引的函数的概念。 – Bran 2014-11-03 20:24:53

+1

@Bran也许,你要找的是'arrayfun'。 – 2014-11-03 20:26:24

+0

@CapeCode arrayfun()是这样做的一种方式,但不幸的是它在每次函数调用期间都会提供开销。我正在寻找一种替代方法来加速通过矩阵操纵/索引修改每个单元格的过程... – Bran 2014-11-04 00:43:17

相关问题