глюки, где Numpy отличается от прямого Python?

Поскольку, что я видел, можно использовать мерзавца между репозиторием, получают с мерзавцем-svn (таким образом, у Вас мог быть репозиторий общественности мерзавца, который будет "зеркалом" svn repo, Вы говорите о, но мерзавец repo мог быть размещен в Вас сайт).

Таким образом контроль/клон/нажатие/получение по запросу для пользователей мерзавца будет быстр. Затем я предполагаю, что можно добавить рычаги к мерзавцу repo для синхронизации с svn repo через мерзавца-svn, но необходимо будет иметь дело с конфликтом, пока Вы не используете различные ответвления.

, Что мы, вот то, что каждый dev имеет ответвление с его именем в нем, и он должен объединиться с основным ответвлением (таким образом, он обрабатывает конфликт), прежде чем администратор объединит свое ответвление с ведущим устройством без любого конфликта, так как dev уже обрабатывают его.

Hope эта справка.

27
задан denis 25 August 2009 в 09:34
поделиться

7 ответов

Самая большая проблема для меня заключалась в том, что почти каждый стандартный оператор перегружен для распределения по массиву.

Определите список и массив

>>> l = range(10)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> import numpy
>>> a = numpy.array(l)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Умножение дублирует список Python, но распределяет по массив numpy

>>> l * 2
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a * 2
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

Сложение и разделение не определены в списках Python

>>> l + 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
>>> a + 2
array([ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> l / 2.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'list' and 'float'
>>> a / 2.0
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])

Перегрузки Numpy иногда обрабатывают списки как массивы

>>> a + a
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])
>>> a + l
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])
22
ответ дан 28 November 2019 в 04:03
поделиться
print pynan is pynan, pynan is NaN, NaN is NaN

Проверяет идентичность, т. Е. Является ли это одним и тем же объектом. Таким образом, результат должен быть True, False, True, потому что, когда вы делаете float (что угодно), вы создаете новый объект float.

a = (0, pynan)
print a, a[1] is pynan, any([aa is pynan for aa in a])

Я не знаю, что вас удивляет.

a = array(( 0, NaN ))
print a, a[1] is NaN, isnan( a[1] )

Это Мне пришлось бежать. :-) Когда вы вставляете NaN в массив, он конвертируется в объект numpy.float64, поэтому [1] is NaN не работает.

Все это кажется мне довольно неудивительным. Но тогда я действительно ничего не знаю о NumPy. : -)

3
ответ дан 28 November 2019 в 04:03
поделиться

NaN не является одноэлементным, как None , поэтому вы не можете использовать для него проверку is. Что делает его немного сложным, так это то, что NaN == NaN равно False , как того требует IEEE-754. Вот почему вам нужно использовать функцию numpy.isnan () , чтобы проверить, не является ли число с плавающей запятой. Или стандартная библиотека math.isnan () , если вы используете Python 2.6 +.

12
ответ дан 28 November 2019 в 04:03
поделиться

Я думаю, что это забавно:

>>> import numpy as n
>>> a = n.array([[1,2],[3,4]])
>>> a[1], a[0] = a[0], a[1]
>>> a
array([[1, 2],
       [1, 2]])

С другой стороны, для списков Python это работает по назначению:

>>> b = [[1,2],[3,4]]
>>> b[1], b[0] = b[0], b[1]
>>> b
[[3, 4], [1, 2]]

Забавное примечание: у самого numpy была ошибка в перемешивании , потому что она использовала эту нотацию :-) (см. здесь ).

Причина в том, что в первом случае мы имеем дело с представлениями массива, поэтому значения перезаписываются на месте.

21
ответ дан 28 November 2019 в 04:03
поделиться

от Нила Мартинсена-Баррелла в numpy-обсуждение 7 сентября -

Тип ndarray, доступный в Numpy, не концептуально расширение Итерации Python. Если вы хотите помочь другим пользователям Numpy с этим вопрос, вы можете редактировать документацию в редакторе онлайн-документации по адресу numpy-docs

2
ответ дан 28 November 2019 в 04:03
поделиться

Значение истинности для массива Numpy отличается от значения истинности для типа последовательности Python, где любая непустая последовательность является истинной.

>>> import numpy as np
>>> l = [0,1,2,3]
>>> a = np.arange(4)
>>> if l: print "Im true"
... 
Im true
>>> if a: print "Im true"
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use
a.any() or a.all()
>>>

Числовые типы истинны, если они не равны нулю и как набор чисел массив numpy наследует это определение. Но с набором чисел истина могла бы разумно означать «все элементы не равны нулю» или «хотя бы один элемент не равен нулю». Numpy отказывается угадывать, какое определение имеется в виду, и вызывает вышеуказанное исключение. Использование методов .any () и .all () позволяет указать, какое значение имеется в виду.

>>> if a.any(): print "Im true"
... 
Im true
>>> if a.all(): print "Im true"
... 
>>>
6
ответ дан 28 November 2019 в 04:03
поделиться

При нарезке создаются виды, а не копии.

>>> l = [1, 2, 3, 4]
>>> s = l[2:3]
>>> s[0] = 5
>>> l
[1, 2, 3, 4]

>>> a = array([1, 2, 3, 4])
>>> s = a[2:3]
>>> s[0] = 5
>>> a
array([1, 2, 5, 4])
7
ответ дан 28 November 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: