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!