Отключить модный индекс и назначение? - PullRequest
2 голосов
/ 28 марта 2012

В этом сообщении указана "функция", которую я хотел бы отключить.
Текущее поведение numpy:

>>> a = arange(10)
>>> a[a>5] = arange(10)
array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3])

Причина, по которой это проблема: скажем, я хотел массивиметь два разных набора значений по обе стороны от точки останова (например, для создания «нарушенного степенного закона» или какой-либо другой простой кусочной функции).Я мог бы случайно сделать что-то вроде этого:

>>> x = empty(10)
>>> a = arange(10)
>>> x[a<=5] = 0 # this is fine
>>> x[a>5] = a**2 # this is not
# but what I really meant is this
>>> x[a>5] = a[a>5]**2 

Первое поведение, x[a>5] = a**2 дает что-то, что я считаю нелогичным - формы левой и правой сторон не совпадают и справане скаляр, но NumPy позволяет мне сделать это назначение.Как указано в другом посте, x[5:]=a**2 не разрешено.

Итак, мой вопрос: есть ли способ заставить x[a>5] = a**2 поднять Exception вместо выполнения задания?Я очень переживаю, что в моем коде скрыты опечатки, потому что я никогда раньше не подозревал такого поведения.

1 Ответ

2 голосов
/ 28 марта 2012

Я не знаю, каким образом можно отключить базовую функцию numpy.Вместо отключения поведения вы можете попробовать использовать np.select:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.select.html

In [110]: x = np.empty(10)
In [111]: a = np.arange(10)
In [112]: x[a<=5] = 0
In [113]: x[a>5] = a**2
In [114]: x
Out[114]: array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  4.,  9.])

In [117]: condlist = [a<=5,a>5]
In [119]: choicelist=[0,a**2]
In [120]: x = np.select(condlist,choicelist)
In [121]: x
Out[121]: array([ 0,  0,  0,  0,  0,  0, 36, 49, 64, 81])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...