数组创建
numpy.empty(shape, dtype=float, order='C')
numpy.zeros(shape, dtype=float, order='C')
numpy.ones(shape, dtype=float, order='C')
根据列表或者元组参数 a 创建数组
numpy.asarray(a, dtype=None, order=None)
根据缓冲区的对象作为参数 buffer 作为 ndarray
"""
dtype 默认为 float,表示数据类型
count 默认值为 -1,表示读取所有数据
offset 默认为 0,表示从第一位读取
"""
numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)
根据可迭代对象 iterable 返回一个新的一维数组
numpy.fromiter(iterable, dtype=float, count=-1)
根据数值范围来创建数组
"""
start 默认为 0,表示范围的起始值
stop 范围的终止值(开区间,不包括该数)
step 默认为 1,表示两个值的间隔
dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型
"""
numpy.arange(start, stop, step, dtype)
指定范围内的均匀间隔数量,而不是步长,来创建数组
"""
start 序列的起始值
stop 序列的终止值,如果 endpoint 为 true,该值包含于序列中
num 默认为 50,要生成的等间隔样例数量
endpoint 默认为 true,表示是否包含 stop 值
retstep 默认为 false, 表示是否返回连续数字之间的步长
dtype 返回ndarray的数据类型
"""
numpy.linspace(start, stop, num, endpoint, retstep, dtype)
包含在对数刻度上均匀分布的数字,刻度的开始和结束端点是某个底数的幂,通常为10
"""
类似于 numpy.linspace 函数,只是这里是对数刻度上的均匀分布而已,多了一个参数 base,默认为 10;并且没有 retstep 参数
"""
numpy.logspace(start, stop, num, endpoint, base, dtype)
索引方法:字段访问、基本切片和高级索引
基本切片
"""
- 通过将 start stop 和 step 参数提供给内置的 slice 函数来构造一个 python slice 对象
a = np.arange(10)
s = slice(2, 7, 1) # [2, 3, 4, 5, 6]
a[s]
等效于
a[2:7:1] 或者 a[2:7] - 使用包括省略号 ... 来使选择元组的长度与数组的维度相同,如果在行位置使用省略号,它将返回包含行中元素的 ndarray
"""
高级索引
"""
如果一个 ndarray 是非元组序列,数据类型为整数或布尔值的ndarray,或者至少一个元素为序列对象的元组,
我们就能够用它来索引ndarray。
高级索引始终返回数据的副本,与此相反,切片只提供一个视图。
"""
使用布尔值
x = numpy.arange(12).reshape(4,3)
print x[x > 5] # 获取大于5的元素
使用 ~ 取补运算符 来过滤 NaN
x = numpy.array([numpy.nan, 1, 2, numpy.nan, 3, 4, 5])
print x[~numpy.isnan(x)]
使用 iscomplex 过滤
x = numpy.array([1, 2+6j, 5, 3.5+5j])
print x[numpy.iscomplex(x)]
广播 broadcast
"""
当操作两个array时,numpy会逐个比较它们的shape(构成元组tuple),只有在下述情况下,两arrays才算兼容
- 相等
- 其中一个为1,(进而可进行拷贝拓展,达到shape匹配)
注意:
- 执行broadcast的前提是,两个ndarray执行的是 element-wise(按位加、按位减)的运算,而不是矩阵乘法的运算,矩阵乘法需要维度之间严格匹配;
- 如果矩阵乘法 numpy.dot(A, B) 维度不匹配时,提示的错误不是 broadcast 而是 aligned
- 一维数组置于矩阵乘法的左边,被视为一个行向量
- 一维数组置于矩阵乘法的右边,被视为一个列向量
- (这样和一个一维数组作用无论是在左还是在右)矩阵乘法运算结束得到的向量仍是一维数组
"""