import numpy as np
numpy.array 常用变量及参数
- dtype变量,用来存放数据类型, 创建数组时可以同时指定。
- shape变量, 存放数组的大小, 这人值是可变的, 只要确保无素个数不变的情况下可以任意修改。(-1为自动适配, 保证个数不变)
- reshape方法,创建一个改变了形状的数组,与原数组是内存共享的,即都指向同一块内存。
创建数组的方法
[python] view plain copy
- np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.float)
- np.arange(0,1,0.1) #0到1之间步长为0.1的数组, 数组中不包含1
- np.linspace(0, 1, 5) # 开始:0, 结束1, 元素个数 5。 array([ 0. , 0.25, 0.5 , 0.75, 1. ])
- np.logspace(0, 1, 5) # 开始:0, 结束1, 元素个数 5. array([ 10**0. , 10**0.25, 10**0.5 , 10**0.75, 10**1. ])
- # 结果是 array([ 1. , 1.77827941, 3.16227766, 5.62341325, 10. ])
- s = 'abcdefg'
- np.fromstring(s, dtype=np.int8)
- def func2(i, j):
- return (i 1) * (j 1)
- np.fromfunction(func2, (9,9))
- np.ones((2, 2))
- np.zero((2, 2))
- np.eye(2)
- #创建二维数组:
- np.arange(0, 60, 10).reshape(-1, 1) np.arange(0, 6)
数据读取
通过 下标范围获取数据: 与python list对象操作一致。 不同点是这方法 获取的数组与原数组是内存共享的。
通过 整数序列获取新数组:例 x[ [3,2,3,2] ], 产生新数组, 内存不共享 使用 布尔数组获取数据:例: x[np.array([true, false, true, false, false])] 或 x[x>0.5] , 返回true对应的数字。 代码示例: [python] view plain copy
- >>> x = np.arange(10)
- >>> y = x[::-1]
- >>> x
- array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- >>> y
- array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
- >>> y[0] = 100
- >>> x
- array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 100])
- >>> y
- array([100, 8, 7, 6, 5, 4, 3, 2, 1, 0])
- >>> x[0] = 99
- >>> x
- array([ 99, 1, 2, 3, 4, 5, 6, 7, 8, 100])
- >>> y
- array([100, 8, 7, 6, 5, 4, 3, 2, 1, 99])
- >>> y = x[1:6]
- >>> y
- array([1, 2, 3, 4, 5])
- >>> y[2] = 33
- >>> y
- array([ 1, 2, 33, 4, 5])
- >>> x
- array([ 99, 1, 2, 33, 4, 5, 6, 7, 8, 100])
- >>> x[[3,2,3,2]]
- array([33, 2, 33, 2])
- >>> z = x[[3,2,3,2]]
- >>> z
- array([33, 2, 33, 2])
- >>> z[3] = 4
- >>> z
- array([33, 2, 33, 4])
- >>> x
- array([ 99, 1, 2, 33, 4, 5, 6, 7, 8, 100])
- >>> x[x>10]
- array([ 99, 33, 100])
- >>>
数组扩展 np.vstack((a, b)): 增加行数, 把b数据追加到a的下面, 上下连接。 np.hstack((a, b)): 增加列数,把a, b左右连接。 [python] view plain copy
- >>> a = np.ones((3,3))
- >>> b = np.eye(3)
- >>> a
- array([[ 1., 1., 1.],
- [ 1., 1., 1.],
- [ 1., 1., 1.]])
- >>> b
- array([[ 1., 0., 0.],
- [ 0., 1., 0.],
- [ 0., 0., 1.]])
- >>> b *= 2
- >>> b
- array([[ 2., 0., 0.],
- [ 0., 2., 0.],
- [ 0., 0., 2.]])
- >>> np.vstack((a, b))
- array([[ 1., 1., 1.],
- [ 1., 1., 1.],
- [ 1., 1., 1.],
- [ 2., 0., 0.],
- [ 0., 2., 0.],
- [ 0., 0., 2.]])
- >>>
- >>> np.hstack((a, b))
- array([[ 1., 1., 1., 2., 0., 0.],
- [ 1., 1., 1., 0., 2., 0.],
- [ 1., 1., 1., 0., 0., 2.]])
ufunc运算
ufunc是universal function的缩写,它是一种能对数组的每个元素进行操作的函数。numpy内置的许多ufunc函数都是在c语言级别实现的,因此它们的计算速度非常快。
[python] view plain copy
- np.sin(x, x)
- np.add(a, b) ~ a b
- np.subtract(a, b) ~ a-b
- np.multiply(a, b) ~ a*b
- divide ~ a/b
- floor divide ~ a//b
- negative ~ -a
- power ~ a**b
- remainder ~ a % b
注意:复杂运算时,中间步聚会有临时变量,这会拖慢运算速度。 如: [python] view plain copy
- x = a*b c
等价于 [python] view plain copy
- t = a*b
- x = t c
- del t
所以可手动优化
[python] view plain copy
- x = a * b
- x = c
二维数组转一维
[html] view plain copy
- >>> a
- array([[ 1, 2, 3, 4],
- [ 4, 5, 6, 7],
- [ 7, 8, 9, 10]])
- >>> a.ravel()
- array([ 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10])
[html] view plain copy
- reshape函数可重新定义大小。