why do we initialize any vector or matrices with zero.

조회 수: 41 (최근 30일)
Akhil
Akhil 2023년 7월 8일
댓글: Bruno Luong 2023년 7월 9일
before doing any operation with matrices which we want as output, we define a matrix and initialize with zero. why do we do it? what if we don't initialize it? and what if we initialize with other no.
  댓글 수: 2
Sandeep Mishra
Sandeep Mishra 2023년 7월 8일
Can you give an example to clarify your question?
Akhil
Akhil 2023년 7월 8일
편집: Akhil 2023년 7월 8일
Ok, let say we have an input matrix A,which is entered by the user.we want an additional matrix B as output.which will have some elements by modification in elements of A. So, before entering the loop, we consider B= zeros(row,column), why? Why not ones or any other values?

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

답변 (3개)

Voss
Voss 2023년 7월 8일
  댓글 수: 1
Walter Roberson
Walter Roberson 2023년 7월 8일
Internally, initializing with zero is faster than initializing with anything else. But you can initialize with ones() or false() or true() or NaN() or inf() or whatever makes sense in context

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


John D'Errico
John D'Errico 2023년 7월 8일
편집: John D'Errico 2023년 7월 8일
You can preallocate with ANY number. Feel free to preallocate with pi, using say, repmat. Personally, I like to preallocate with NaNs, or maybe the number 17. This way, when I test the code out, I can tell if I screwed up with the size. (What, me screw up? Surely not.)
But you preallocate whenever the array will grow in size otherwise. Read the link proided by @Voss.
Other arrays need not be preallocated.

James Tursa
James Tursa 2023년 7월 9일
편집: James Tursa 2023년 7월 9일
If you know you will be filling in the variable elements downstream anyway, it would be faster to just allocate the memory and not spend the time filling the values with anything. That being said, MATLAB must have some type of optimizations going on in the background for the zeros( ) function because the timings rival a mex routine that allocates but does not initialize:
R2021a PCWIN:
>> N = 1024*1024*1024/8 % 1 GB variable
N =
134217728
>> timeit(@()nan(N,1))
ans =
0.4622
>> timeit(@()inf(N,1))
ans =
0.4729
>> timeit(@()ones(N,1))
ans =
0.4645
>> timeit(@()zeros(N,1))
ans =
0.0134
>> timeit(@()uninit(N,1)) % mex routine that allocates but does not initialize
ans =
0.0135
I would point out that this was not the case in earlier versions of MATLAB, where uninit( ) used to handily beat the zeros( ) function.
  댓글 수: 3
Walter Roberson
Walter Roberson 2023년 7월 9일
In some recent releases (I do not know about the latest release), initializing an array with zeros() was special. If you use zeros() to preallocate an array large enough that you are running close to your memory limits, then zeros() can succeed and appear to give you memory, only to be told that you have run out of memory as soon as you assign into the array. But you can keep the zeros() array around as long as you leave it as pure zeros.
I cannot seem to replicate this at the moment, so it might have changed.
Bruno Luong
Bruno Luong 2023년 7월 9일
Yes I confirm have seen what James and Walter observes.
The Execution Engine can delay the effectve (zeros) allocation later, when the array is effectively used.
Measuring the allocation time alone doesn't not reflect the real speed.

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

카테고리

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

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by