Long list to numeric multi-D array

S

Stephen Boulet

I have a long list of floats (1613808 elements long). It takes quite a
while to load this into a 7 dimensional Numeric array.

Is there any obvious way to speed this up?

def insertData(self,data):

# Start off with an array of the desired size
# "self.MEASURED", etc., are integers
arrayData = zeros([self.MEASURED, self.SWEPT, \
self.TEMPS,self.DCS, self.IVS, self.UUTS, \
self.DUTS], Float64)

i = 0

for device in range(self.DUTS):
for unit in range(self.UUTS):
for iv in range(self.IVS):
for dc in range(self.DCS):
for temp in range(self.TEMPS):
for swept in range(self.SWEPT):
for measured in range(self.MEASURED):

arrayData[measured][swept][temp][dc][iv][unit][device] = bigList
i += 1
return arrayData

Stephen
 
J

Josiah Carlson

Stephen said:
I have a long list of floats (1613808 elements long). It takes quite a
while to load this into a 7 dimensional Numeric array.

Is there any obvious way to speed this up?


Perhaps reshape will be able to solve this problem for you. I hear it
is very fast.

- Josiah
 
S

Stephen Boulet

To respond to my own post, after a bit of digging, there is a much
faster way.

Coerce my list to a numarray:

bigList = inputarray(bigList,Float64)

Then just change its shape:

dims = [self.DUTS,self.UUTS,..,self.MEASURED]
dims.reverse()
dims = tuple(dims)
bigList.setshape(dims)
 
D

Duncan Smith

Stephen Boulet said:
I have a long list of floats (1613808 elements long). It takes quite a
while to load this into a 7 dimensional Numeric array.

Is there any obvious way to speed this up?

def insertData(self,data):

# Start off with an array of the desired size
# "self.MEASURED", etc., are integers
arrayData = zeros([self.MEASURED, self.SWEPT, \
self.TEMPS,self.DCS, self.IVS, self.UUTS, \
self.DUTS], Float64)

i = 0

for device in range(self.DUTS):
for unit in range(self.UUTS):
for iv in range(self.IVS):
for dc in range(self.DCS):
for temp in range(self.TEMPS):
for swept in range(self.SWEPT):
for measured in range(self.MEASURED):

arrayData[measured][swept][temp][dc][iv][unit][device] = bigList
i += 1
return arrayData

Stephen


Creating a 1-dimensional array, then reshaping it is (I guess) as quick as
anything. Something like,
import Numeric
an_array = Numeric.array(range(24))
shape = [2, 3, 4]
an_array = Numeric.reshape(an_array, shape)
an_array
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,176
Messages
2,570,950
Members
47,503
Latest member
supremedee

Latest Threads

Top