# [Numpy-discussion] Nasty bug using pre-initialized arrays

Stuart Brorson sdb@cloud9....
Fri Jan 4 15:08:54 CST 2008

```NumPy gurus --

I just discovered this today.  It looks like a bug to me.  Please
flame me mercilessly if I am wrong!  :-)

Sometimes you need to initialize an array using zeros() before doing
an assignment to it in a loop.  If you assign a complex value to the
initialized array, the imaginary part of the array is dropped.  Does
NumPy do a silent type-cast which causes this behavior?  Is this
typecast a feature?

Below I attach a session log showing the bug.  Note that I have boiled
down my complex code to this simple case for ease of comprehension.  [1]
I will also input this bug into the tracking system.

By the way, this is NumPy 1.0.4:

In [39]: numpy.__version__
Out[39]: '1.0.4'

Cheers,

Stuart Brorson
Interactive Supercomputing, inc.
135 Beaver Street | Waltham | MA | 02452 | USA
http://www.interactivesupercomputing.com/

----------------------  <session log>  --------------------

In [29]: A = numpy.random.rand(4) + 1j*numpy.random.rand(4)

In [30]: B = numpy.zeros((4))

In [31]:

In [31]: for i in range(4):
....:       B[i] = A[i]
....:

In [32]: A
Out[32]:
array([ 0.12150180+0.00577893j,  0.39792515+0.03607227j,
0.61933379+0.04506978j,  0.56751678+0.24576083j])

In [33]: B
Out[33]: array([ 0.1215018 ,  0.39792515,  0.61933379,  0.56751678])

-----------------------  </session log>  -------------------

[1]  Yes, I know that I should use vectorized code as often as
possible, and that this example is not vectorized.  This is a simple
example illustrating the problem.  Moreover, many times the
computation you wish to perform can't easily be vectorized, leaving
the nasty old for loop as the only choice......
```