Efficiently creating a partially filled NaN array with non-identical numbers of vals per row?
1 view (last 30 days)
Show older comments
Hi everyone, quick question. I'm trying to optimize my code to handle data sets larger than one item for a specific equation. I wanted to do this in order to perform mxn matrix functions instead of sequential 1xn vector algebra. The primary stoppage for this is the following mathematical function. Vars defined as:
M - a small scalar integer variable used elsewhere in my code
k - index of a parent for loop that iterates 1:M
m - number of samples
n - [m M] array of integers
j - [m M] array of values 0-1
So the complication is in the following code line 6, which works fine for a single sample but breaks when size(n,1)>1
inter1 = 0
for k=1:M
inter1 = inter1 + ( (n(:,k) .*0.25.*pi .* rf(:,k).^4) + ...
pi .*rf(:,k).^2 .*rc(:,k).^2 .* ...
sum(sin(2*pi .*( ...
[1:n(:,k)] ...
+j(:,k)-1) ./n(:,k)).^2),2 );
end
Ideally I was hoping to optimize the section `[1:n(:,k)]` to yield the following result
>>n=[2 3 5; 3 2 4; 1 2 4];
>>f(n(:,2))
= [ 1 2 3
1 2 NaN
1 2 NaN ]
>>f(n(:,1))
= [ 1 2 NaN
1 2 3
1 NaN NaN ]
I'm specifically looking for NaN instead of 0 because if there were not that many objects (as indicated by n(i,k)) then they will not exist in a row summation. My best attempt at this is
newArray = nan(m,max(n(:,k)))
for i=1:m
newArray(i,1:n(i,k)) = 1:n(i,k)
end
And then proceeding with the code as before. Ultimately, the goal is:
>>size(A)
[m 1]
Answers (0)
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!