Hi folks -
I had seen some talk on this list about the utility of a decorator
for functions that need to convert their arguments to numpy arrays.
This would help eliminate boilerplate calls to 'asarray' like:
def distance_squared(a, b):
a = numpy.asarray(a)
b = numpy.asarray(b)
return ((a - b)**2).sum()
Here is a trivial decorator I was thinking of adding to the wiki --
does this cover enough cases to be useful? In a bigger sense, would
it be worthwhile to add some decorators like this to numpy itself?
(I'm not sure I'm in favor of this, since I kind of like smaller APIs
over bigger ones.)
def array_arguments(f):
"""Wrap a function such that any positional arguments are
converted into numpy arrays before the function is called."""
def convert_arg_wrapper(*args, **kwargs):
array_args = [numpy.asarray(a) for a in args]
return f(*array_args, **kwargs)
return convert_arg_wrapper
now distance_squared can look like:
@array_arguments
def distance_squared(a, b):
return ((a - b)**2).sum()
if using python 2.4, or if not so using:
def distance_squared(a, b):
return ((a - b)**2).sum()
distance_squared = array_arguments(distance_squared)
Zach

Folks,
I'm trying to use `vectorize` on the following lambda function, taking a
scalar as input, and output a 10-char string
fnc = lambda x: datetime.date.fromordinal(x).strftime("%Y-%m-%d")
I can't find a way to get an actual 'S10' chararray as output. OIn top of
that, it seems that vectorize still uses the oldnumeric typecode: is this on
purpose (and then which one), or just because it has been updated yet ?
Here's what I tried so far.
Any idea/comment (even a 'that can't work, forget it) more than welcome, as
usual
Thx
P.
----------------------------------------------------------
x = array([719893,719894, 719895])
fnc(x[0])
>>> '1972-01-01'
fnc(x[:2])
>>> TypeError: only length-1 arrays can be converted to Python scalars
(OK, that wasn't suppose to work)
vectorize(fnc)(x[:2])
>>> array([, ], dtype='|S0')
(not quite)
vectorize(fnc,otypes="S")(x[:2])
>>> array([, ], dtype='|S0')
(ditto)
vectorize(fnc,otypes="|S10")(x[:2])
>>> ValueError: invalid typecode specified
asarray(vectorize(fnc)(newddatesordinal[:2]),dtype='|S10')
>>> array([Ø6z«ª*, Ø6z«ª*], dtype='|S10')

Hi,
I'm a long time user of numarray. Now I downloaded numpy for the first
time - and am quite excited to maybe soon being able to use things like
weave !
Thanks for all the good work !
1)
I was following the discussion about dtype with interest, and so it was
one of the first things to check...
>>> repr(aa.dtype)
'dtype('<i4')'
>>> str(aa.dtype)
''<i4''
>>> aa.dtype.name
'int32'
Would it be possible to change str(aa.dtype) to aa.dtype.name ??
I think it would be much more readable !
I'm mainly thinking of (some "less involved") people that just want to
know that it's a '32bit integer' ; '<i4' is quite cryptic !
2)
This is probably more numarray related:
Why does numarray.asarray( numpy.array([1]) ) return a numpy array, not
a numarray ??? This is even true for numarray.array( numpy.array([1]) ) !!
I'll keep exploring...
Thanks,
Sebastian Haase

Hello,
I'm trying to figure out what is the proper type for indexing arrays.
Is it safe to use Py_ssize_t although PyArrayObject dimensions are of
Py_intptr_t (intp) type or use intp instead of Py_ssize_t?
Is there any platform on which these two types has different size or
range?
References:
[1] http://www.python.org/dev/peps/pep-0353/#why-not-py-intptr-t
[2] numpy 0.9.6, arrayobject.c:
static _int_or_ssize_t
array_length(PyArrayObject *self)
{
if (self->nd != 0) {
return self->dimensions[0];
} else {
PyErr_SetString(PyExc_TypeError, "len() of unsized object");
return -1;
}
}
// self->dimensions is of intp* type
[3] http://svn.python.org/projects/python/branches/ssize_t/Include/abstract.h
PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
const void **buffer,
Py_ssize_t *buffer_len);
--
best,
fw

There's a problem with the _wrapit function. If the function that it
wraps, returns a scalar, it blows up. Here's an example:
import numpy
class narray(numpy.ndarray):
def get_argmax(self):
raise AttributeError
argmax = property(get_argmax)
a = narray([3], int, numpy.arange(3))
print type(a), isinstance(a, numpy.ndarray)
print a
print numpy.argmax(a)
==>
<class '__main__.narray'> True
[0 1 2]
Traceback (most recent call last):
File "find_bug.py", line 13, in ?
print numpy.argmax(a)
File "C:\python24\lib\site-packages\numpy\core\oldnumeric.py",
line 278, in argmax
return _wrapit(a, 'argmax', axis)
File "C:\python24\lib\site-packages\numpy\core\oldnumeric.py",
line 170, in _wrapit
result = wrap(result)
TypeError: can only be called with ndarray object
A possible fix is to do another isinstance check on the way out:
def _wrapit(obj, method, *args, **kwds):
try:
wrap = obj.__array_wrap__
except AttributeError:
wrap = None
result = getattr(asarray(obj),method)(*args, **kwds)
if wrap and isinstance(result, mu.ndarray):
result = wrap(result)
return result
That fixes this problem, and I think it should be OK in general, but I'd
like a second opinion before comitting it.
regards,
-tim

The following snippet utilizing a rank-0 array will segfault numpy:
import numpy
a = numpy.array(4)
b = numpy.arange(10)
a *= b
(Build '0.9.7.2301' using VC7 on windows).
I'll file a better bug report tomorrow, assuming this hasn't been fixed,
but I'm on my way out the door.
-tim

ПРАКТИЧЕСКИЙ КУРС
ПО ВНУТРЕННЕМУ КОНТРОЛЮ И БОРЬБЕ С КОРПОРАТИВНЫМ МОШЕННИЧЕСТВОМ
10 13 апреля 2006 года
Рост отечественной экономики, развитие российских предприятий, усиление
конкуренции и другие факторы способствуют повышению роли корпоративного
управления в компании, одним из инструментов которого является внутренний
контроль. Еще недавно среди собственников и менеджеров российских предприятий
не существовало четкого понимания его роли и места в структуре бизнеса.
Сейчас же у всё большего числа компаний появляются службы внутреннего контроля,
которые помогают предприятию достичь поставленных целей, используя систематизированный
и последовательный подход к оценке и повышению эффективности процессов
управления рисками, контроля над мошенничеством, воровством и злоупотреблениями
со стороны сотрудников.
Семинар рассчитан на руководителей внутренних контрольных органов, членов
советов директоров и ревизионных комиссий, а также руководителей финансовых
служб. Прикладные технологии, инструменты и рекомендации объединены в программу
четырехдневного специализированного семинара-практикума:
ПРАКТИЧЕСКИЙ КУРС
ПО ВНУТРЕННЕМУ КОНТРОЛЮ И БОРЬБЕ С КОРПОРАТИВНЫМ МОШЕННИЧЕСТВОМ
10 13 апреля 2006 года
ЦЕЛЬ КУРСА: рассмотреть действующую систему и технологии организации регулярного
менеджмента в сочетании с эффективной системой внутреннего контроля, которая позволит
участникам курса оптимизировать расходы через снижение уровня злоупотребления
сотрудниками и корпоративного воровства. Используя ее для упорядочивания
деятельности, можно получить ощутимую экономию денежных ресурсов и активов
предприятия в целом
Семинар проходит в интенсивной интерактивной форме с разбором большого
количества примеров из практики российских и зарубежных компаний. На семинаре
будет проведен МАСТЕР-КЛАСС Использование результатов внутреннего контроля
при защите от неправомерных действий правоохранительных и контролирующих
органов, а также рассмотрены и решены конкретные ситуации из деятельности
реальных компаний.
Чтобы принять участие в курсе или получить подробную информацию,
позвоните нам по телефонам: (495) 98O-65-16, 98О-65-Ч9

>>> a=numpy.array(list('foabcdeef'),dtype=numpy.dtype("O"))
>>> numpy.equal(a,'f')
NotImplemented
So where do I start implementing this ?
core/src/ufuncobject.c ?
Simon.
--
Simon Burton, B.Sc.
Licensed PO Box 8066
ANU Canberra 2601
Australia
Ph. 61 02 6249 6940
http://arrowtheory.com

Thanks Pearu,
>From the documentation in freeze.py, it is possible to tell freeze the
explicit path to modules.
freeze [options...] script [module]
where module is an absolute path.
I'll try this out.
David