小编典典

numpy与普通python不同的地方是什么?

python

民间,

是否有一些Numpy与python不同的陷阱,这些点令人困惑并花费时间?

“那一刻的恐怖,我将永远不会忘记!”
女王说:“不过,如果您不做备忘录,您会的。”

例如,NaN在任何地方都总是麻烦。如果您不做任何解释就可以说明这一点,

from numpy import array, NaN, isnan

pynan = float("nan")
print pynan is pynan, pynan is NaN, NaN is NaN
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] )

(我并没有敲打麻木,那里没有很多好的工作,只是认为常见问题解答或维基百科将很有用。)

编辑:我希望能收集到半个陷阱(人们学习Numpy的惊喜)。
然后,如果有常见的陷阱,或者更好的是常见的解释,我们可以讨论将其添加到社区Wiki(在哪里?),到目前为止我们还不够。


阅读 212

收藏
2020-12-20

共1个答案

小编典典

对我而言,最大的难题是几乎每个标准运算符都超载,无法在整个阵列中分布。

定义一个列表和一个数组

>>> 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])
2020-12-20