2016-03-20 82 views
0

比方说,我有一个数组A = [1 2 3 4 5 6 7 8 9 10]。我想遍历它并对每个数字做一些事情。Octave使用迭代(开始:步:结束)

A(start:step:end) - >因为我想重复步骤1我使用A(1:10)

这里的问题是,我该如何使用该迭代?在C + +你会做

for (int i = 0; i < 10; i++) 
{ 
    //DO SOMETHING 
} 

我花了4个小时来搜索如何使用该迭代。我还没有找到这样一个简单的事情的单一解释:传递代码块实际上做一些数字。甚至不知道如何使用当前索引(即C++中的i)。

我有我的功能Octave f = @(variable) (...),但是当我打电话f(A(1:10))它并不真正传递每个数字的功能,而是完成迭代,然后执行功能。

我期望像

A(1:10) (DO SOMETHING WITH EACH NUMBER) 

或在我的例子

A(1:10) (f(INDEX)) 

但这似乎并没有任何工作。

我知道Octave有一个内置for循环,但在我的情况下它太慢了。

这是简化的说明,这里比较先进。 我想要矩阵A乘以一个矩阵开始迭代1和另一个与2(例如,A(1:end-1).*A(2:end)),并使用我的自定义函数中的每个相乘的数字。

+0

'A(1:10)'是一个数组表达式;特别是长度为10的矢量表达式,它的形状可以是1x10或10x1,我永远不会记得它是正确的。你想做的事情看起来像逐元素乘法运算符('。*')所做的,所以你对一个函数的调用应该是:f(A(1:end-1)。* A(2: )' –

+0

你在找什么叫矢量化,通常涉及['bsxfun'](http://www.mathworks.com/help/matlab/ref/bsxfun.html),但我们必须知道你正在使用的功能是为了提出一个解决方案。 – beaker

回答

0

C++环

for (int i = 0; i < 10; i++) 
{ 
    //DO SOMETHING 
} 

的类似物将是

for i = 1:10 
//DO SOMETHING 
end 

由于八度指数是基于1的。

Octave中没有array.forEach(do something)施工。

大多数情况下,通过将数组(向量和矩阵)一次传递给一个函数并构造函数本身以便它可以处理一个数组,可以实现加速。如何做后者取决于功能是什么。

+0

你可以做'for i = A ...',并获得与'forEach'相同的结果。 – beaker

+0

略有不同,因为'.forEach'可以访问索引以及数组值(可能取决于语言)。 –

+0

呵呵,我不记得有任何这样做的实现,但是是的,你只会得到元素的值而不是索引。 – beaker