Assigning row to array using cellfun

조회 수: 5 (최근 30일)
Konrad Warner
Konrad Warner 2019년 11월 11일
댓글: Konrad Warner 2019년 11월 12일
Hello,
I have a 1x4 cell array, each cell contains a 1000x8 zeros array:
A = arrayfun(@(~) zeros(1000,8),(1:4),'un',0);
Now I want to assign every same row (definded by a background counter) with a new array same length, e.g B = [1 1 1 1 1 1 1 1]
The following loop discribes it quite well...
counter = randi(1000) % any row
for i = 1:4
A{i}(counter,:) = B;
end
I was just wondering if there is a way doing it with cellfun?
  댓글 수: 1
JESUS DAVID ARIZA ROYETH
JESUS DAVID ARIZA ROYETH 2019년 11월 11일
maybe this code can help you
A=zeros(1000,1);
counter = randi(1000); % any row
A(counter)=1;
A=repmat({repmat(A,1,8)},1,4)

댓글을 달려면 로그인하십시오.

채택된 답변

Adam Danz
Adam Danz 2019년 11월 11일
편집: Adam Danz 2019년 11월 11일
Here's your loop, within cellfun().
A = cellfun(@(x)[x(1:counter-1,:);B;x(counter+1:end,:)], A, 'UniformOutput', false);
  댓글 수: 3
Adam Danz
Adam Danz 2019년 11월 11일
Really? I just timed the loop method from your question and the cellfun() method from my answer. Each method was repeated 100,000 times and each iteration was timed using tic/toc. When comparing the median speeds, the loop method was ~22 times faster than the cellfun method (I repeated that process twice and got nearly the same results).
The cellfun() method is (arguably) cleaner and reduces the number of lines of code but often times loops are faster than cellfun(), arrayfun() etc. I wonder if your timing test involved additional computations.
Konrad Warner
Konrad Warner 2019년 11월 12일
Sorry you are right. I didn't repeat the methodes (which doesn't make sense, comparing such short elapsed times). The Loop is much faster, good to know, wouldn't have check twice.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!

Translated by