Applying a function to each row vector of a matrix

32 次查看(过去 30 天)
I have a function that I want to apply to each row of a 7800x784 matrix. The function returns a scalar and puts it into a 7800x1 matrix. So, each row of the first matrix is computed one by one and the output is sent to the second matrix. s and Ns are both 1x26 matrix. Following is my function:
function [ind] = naive_bayes(X, s, Ns)
prob = zeros(1,26);
x = 1;
y = 1800;
for i = 1:size(s,2)
like = sum(X(x:y,:))/s(1,i);
prob(1,i) = Ns(1,i) * prod((like.^X).* (1-like).^(1-X));
x = y + 1;
y = y +1800;
end
[~,ind] = max(prob);
end
Thank you!

回答(1 个)

Walter Roberson
Walter Roberson 2018-4-7
编辑:Walter Roberson 2018-4-7
result = arrayfun(@(ROWIDX) naive_bayes(YourArray(ROWIDX,:)), (1:size(YourArray,1)).');
However, your function has the difficulty that it uses x and y and s without those having been defined.
  3 个评论
Walter Roberson
Walter Roberson 2018-4-7
result = arrayfun(@(ROWIDX) naive_bayes(YourArray(ROWIDX,:),s,Ns), (1:size(YourArray,1)).');
Sameer Karim
Sameer Karim 2018-4-7
I think i messed up the transistion as naive_bayes was actually a part of my main code. I want to reorganise my question so this is the code that i initially had.
prob = zeros(1,26);
for jj = 1:N
for i = 1:size(s,2)
like = sum(X(x:y,:))/s(1,i);
prob(1,i) = Ns(1,i) * prod((like.^Xtst(jj,:)).* (1-like).^(1- Xtst(jj,:)));
x = y + 1;
y = y +1800;
end
x = 1;
y = 1800;
[~,ind] = max(prob);
Cpreds(jj,1) = ind;
end
Here Xtst is my 7800x784 array with N being 7800. X is a 48600x784 array, so sum forms a 1x784 matrix. prob is processed size(s, 2)xN times, x and y resets to its initial values after one row of Xtst is processed. Now Cpreds is my Nx1 matrix with i want to finally produce. So the previous functions was actually being applied on each row of Xtst. Since the matrix size is huge I wanted to implement it using vectorisation. Thanks in advance!

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by