how to avoid using num2cell when dealing to structure arrays?
4 次查看(过去 30 天)
显示 更早的评论
I use a structure array, which contains a field i wish to manipulate for a subset of the structure array:
snr=[node.receivedSignal]./[node.receivedNoise]
temp=[node.power]
nodes_to_update=snr<threshold
newPower=temp(nodes_to_update)*2
at this point i have in my newPower array, (the power levels of the subset of nodes that i need to update). so far what i have been doing is the following:
X=num2cell(newPower)
[node(nodes_to_update).power]=deal(newPower)
Since this is in a loop that repeats too many times (simulation over time), i would like to avoid using num2cell and deal. i run the profiler, and these two functions are the major slowdown on my simulation.
is there a way of assigning values into a structure array's fields from a double array, without converting into a cell and then dealing it into the structure?
Working example:
a(1).a=3
a(2).a=3
a(3).a=5
b=[1 2]
the num2cell and deal solution:
x=num2cell(b)
[a([1 3]).a]=deal(x{:})
i am looking something in the spirit of:
[a([1 3].a]=deal(b(:))
1 个评论
Matt Fig
2012-8-27
I get an error when I use your example.
Assignment between unlike types is not allowed.
采纳的回答
Matt Fig
2012-8-27
There is a way to do it, and it will be faster (at least it is here):
for ii = 1:length(b)
a(idx(ii)).a = b(ii);
end
idx is the [1 3] in your example. For large structures and large index vectors, this will be more than twice as fast.
2 个评论
更多回答(1 个)
Walter Roberson
2012-8-27
No, there is not.
Note: your deal solution is not correct. You need to adjust to
[a([1 3]).a] = deal(x{:})
which can be abbreviated to
[a([1 3]).a] = x{:};
However, the num2cell() step is required, as is assigning the result to a variable.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Clocks and Timers 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!