[Numpy-discussion] optimise operation in array with datetime objects

2009-01-28 Thread Timmie
Hello,
I have an array of datetime objects.

What is the most efficient way of creating a new array
 with only the hours or minutes out of it?

Here is an example:

### imports
import numpy as np
import datetime as dt

### create some data
d = dt.datetime.now()

dates_li = []
count = 0
for i in range(0, 24):
count = count +1
fact = count * 3600
date_new = d + dt.timedelta(0, fact)
print date_new
dates_li.append(date_new)

### the array with datetime objects
dates_array = np.array(dates_li)


### this is the loop I would like to optimize:
### looping over arrays is considered inefficient.
### what could be a better way?
hours_array = dates_array.copy()
for i in range(0, dates_array.size):
hours_array[i] = dates_array[i].hour

hours_array = hours_array.astype('int')



Thanks in advance for any hints!

Kind regards,
Timmie

___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] optimise operation in array with datetime objects

2009-01-28 Thread Pierre GM

On Jan 28, 2009, at 3:56 PM, Timmie wrote:
 ### this is the loop I would like to optimize:
 ### looping over arrays is considered inefficient.
 ### what could be a better way?
 hours_array = dates_array.copy()
 for i in range(0, dates_array.size):
   hours_array[i] = dates_array[i].hour

You could try:
np.fromiter((_.hour for _ in dates_li), dtype=np.int)
or
np.array([_.hour for _ in dates_li], dtype=np.int)

___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] optimise operation in array with datetime objects

2009-01-28 Thread Pierre GM

On Jan 28, 2009, at 5:43 PM, Timmie wrote:

 You could try:
 np.fromiter((_.hour for _ in dates_li), dtype=np.int)
 or
 np.array([_.hour for _ in dates_li], dtype=np.int)

 I used dates_li only for the preparation of example data.

 So let's suppose I have the array dates_array returned from a
 a function.

Just use dates_array instead of dates_li, then.


 hours_array = dates_array.copy()
 for i in range(0, dates_array.size):
   hours_array[i] = dates_array[i].hour


* What's the point of making a copy of dates_array ? dates_array is a  
ndarray of object, right ? And you want to take the hours, so you  
should have an ndarray of integers for hours_array.
* The issue I have with this part is that you have several calls to  
__getitem__ at each iteration. It might be faster to use create  
hours_array as a block:
hours_array=np.array([_.hour for _ in dates_array], dtype=np.int)


___
Numpy-discussion mailing list
Numpy-discussion@scipy.org
http://projects.scipy.org/mailman/listinfo/numpy-discussion