import numpy as np
# NumPy 数组的运算是向量化的# 数组和标量运算是每个元素和标量运算
x = np.array([1,2,3,4])
x +1# array([2, 3, 4, 5]) # 数组和数组运算是逐元素运算
y = np.array([-1,2,3,0])
x * y
array([-1,4,9,0])# 需要计算内积的时候# 使用np.dot
np.dot(x, y)# 12# 所有逻辑运算符也是向量化的
x == y
# array([False, True, True, False], dtype=bool) # NumPy 使用 C 语言编译出来的代码来处理数据# 所以很快
x = np.arange(10000)'''
%timeit x + 1
100000 loops, best of 3: 12.6 µs per loop
'''
y =range(10000)'''
%timeit [i + 1 for i in y]
1000 loops, best of 3: 458 µs per loop
'''
x = np.arange(1,9)
x.dtype
# dtype('int32') # 整数和浮点的 div 运算生成浮点
x = x /10.0
x
# array([ 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])
x.dtype
# dtype('float64') # 整数和浮点的 idiv 运算# 1.10 版之前生成整数# 之后会报错
y = np.arange(1,9)
y /=10.0
y
# array([0, 0, 0, 0, 0, 0, 0, 0])
y.dtype
# dtype('int32')
# 布尔数组可通过数组的逻辑运算来获取
x = np.array([1,3,-1,5,7,-1])
mask =(x <0)
mask
# array([False, False, True, False, False, True], dtype=bool) # NumPy 可接受布尔数组作为索引# 布尔数组的形状需要与原数组一致# True 元素表示取该值,False 表示不取# 结果是一维数组
x [mask]=0
x
# array([1, 3, 0, 5, 7, 0]) # 布尔数组可以使用 sum 方法来统计 True 的个数# 原理是调用 sum 时会将 False 转换成 0# True 转换成 1
x = np.random.random(50)(x >.5).sum()# 20
助手函数
# lookfor 用于搜索包含指定单词的函数
np.lookfor('resize')'''
Search results for 'resize'
---------------------------
numpy.ma.resize
Return a new masked array with the specified size and shape.
numpy.chararray.resize
Change shape and size of array in-place.
numpy.oldnumeric.ma.resize
The original array's total size can be any size.
numpy.resize
Return a new array with the specified shape.
'''# 每个函数或方法的文档字符串中# 都包含它的 API 文档print np.arange.__doc__
'''
arange([start,] stop[, step,], dtype=None)
Return evenly spaced values within a given interval.
Values are generated within the half-open interval ``[start, stop)``
(in other words, the interval including `start` but excluding `stop`).
For integer arguments the function is equivalent to the Python built-in
`range <http://docs.python.org/lib/built-in-funcs.html>`_ function,
but returns an ndarray rather than a list.
...
'''