### Thread: Dealing with imaginary numbers

1. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Feb 2005
Posts
4
Rep Power
0

#### Dealing with imaginary numbers

So I've generated a 2D array with real and imaginary numbers in it. Something like this (this is just an example I'm really dealing with 2D arrays greater than 50x50). The following code uses the for loops to move the values in the array to new positions. The imaginary part is lost when the array is passed through the for loops. I have yet to figure out why. I've tried intializing 'temp' in different ways but have had no luck. Any help is greatly appreciated.
fd

Code:
```from numarray import *

temp = zeros([6,6])

A = array([[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24],[25,26,27,28,29,30],[31,32,33,34,35,36]])

A = A + 2j  #makes A complex

#used to define limits on for loops below
nx = len(A)
ny = len(A)
kx = nx/2
ky = ny/2

print A  #just to see if everything looks all right

#reassigns values in quadrant 2 to 4 and quadrant 3 to 1
for j in arange(kx-1):
for i in arange(kx-1):
temp[i+kx+1,j+kx+1] = A[i,j]
for i in arange(kx-1,ny):
temp[i-kx+1,j-kx+1] = A[i,j]

#reassigns values in quadrant 4 to 2 and quadrant 1 to 3
for j in arange(kx-1,ny):
for i in arange(kx-1):
temp[i-kx+1,j-kx+1] = A[i,j]
for i in arange(kx-1,ny):
temp[i-kx+1,j-kx+1] = A[i,j]

print temp```
2. No Profile Picture
Contributing User
Devshed Newbie (0 - 499 posts)

Join Date
Jan 2005
Posts
37
Rep Power
11
You've got a couple things going on...

second, when you initialize temp, you make it an int array. you need to declare the type to be comlex, like this:

Code:
`tmp = array(zeros([6,6]),type=Complex64)`
Also, there are much easier ways to swap the contents other than for loops. check out the numarray docs:

numarray docs in pdf

I'm not an expert at numarray by any means, but here's how I'd do it. There are probably cleaner ways without so many temp variables, but this gets the point across...
note: only works with square arrays.

Code:
```from numarray import *

temp = zeros([6,6])

A = array([[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24],[25,26,27,28,29,30],[31,32,33,34,35,36]])

A = A + 2j  #makes A complex

#used to define limits on for loops below
n = len(A)

print A  #just to see if everything looks all right

temp = concatenate((top,bottom))

print temp```
3. No Profile Picture
Registered User
Devshed Newbie (0 - 499 posts)

Join Date
Feb 2005
Posts
4
Rep Power
0
Thanks. I messed up my description of the swap. It's not a straight swap of the four quadrants. But, thanks to your advice on numarray this is what the final correct code looks like (without having to intialize it to Complex64). Now I'll try to extend it out to any size matrix. I doubt I'll be lucky enough to deal with only square arrays.

Cheers,
fd

Code:
```from numarray import *

temp = zeros([6,6])

A = array([[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24],[25,26,27,28,29,30],[31,32,33,34,35,36]])

A = A + 2j  #makes A complex

#used to define limits on for loops below
n = len(A)

print A, "\n"  #just to see if everything looks all right