用列表和集合表示 数组与列表的关系 列表:数据类型可以不同 数组:数据类型可以相同
用列表表示
用字典表示 高维数据仅利用最基本的二元关系展示数据之间的复杂结构。
ndarray Python 已有列表类型,为什么需要一个数组对象 (类型)? 看一下下面两个例子就知道了。
- defpySum():
- a=[1,2,3,4]
- b=[4,5,6,7]
- c=[]foriin range(len(a)):
- c.append(a[i]**2 +b[i]**2)returncprint(pySum())
- importnumpyasnpdefnpSum():
- a=np.array([1,2,3,4])
- b=np.array([4,5,6,7])
- c=a**2 +b**2
- returncprint(npSum())
从上面两个例子可以看出,Python 自带的 list 相当于标量化操作,而 ndarray 相当于向量化操作。
属性 | 说明 |
---|---|
.ndim | 秩,即轴的数量或维度的数量 |
.shape | ndarray 对象的尺度,对于矩阵,n 行 m 列 |
.size | ndarray 对象元素的个数,相当于. shape 中 n*m 的值 |
.dtype | ndarray 对象的元素类型 |
.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
下面体会一下实际用法:
- >>> importnumpyasnp>>>a=np.array([[1,2,3],[4,5,6]])>>>a.ndim2
- >>>a.shape
- (2,3)>>>a.size6
- >>>a.dtype
- dtype('int32')>>>a.itemsize4
数据类型 | 说明 |
---|---|
bool | 布尔类型,True 或 False |
intc | 与 C 语言中的 int 类型一致,一般是 int32 或 int64 |
intp | 用于索引的整数,与 C 语言中 ssize_t 一致,int32 或 int64 |
int8 | 字节长度的整数,取值:[‐128, 127] |
int16 | 16 位长度的整数,取值:[‐32768, 32767] |
int32 | 32 位长度的整数,取值:[‐2^31, 2^31‐1] |
int64 | 64 位长度的整数,取值:[‐2^63, 2^63‐1] |
uint8 | 8 位无符号整数,取值:[0, 255] |
uint16 | 16 位无符号整数,取值:[0, 65535] |
uint32 | 32 位无符号整数,取值:[0, 232‐1] |
uint64 | 32 位无符号整数,取值:[0, 264‐1] |
float16 | 16 位半精度浮点数:1 位符号位,5 位指数,10 位尾数 |
float32 | 32 位半精度浮点数:1 位符号位,8 位指数,23 位尾数 |
float64 | 64 位半精度浮点数:1 位符号位,11 位指数,52 位尾数 |
complex64 | 复数类型,实部和虚部都是 32 位浮点数 |
complex128 | 复数类型,实部和虚部都是 64 位浮点数 |
用法:
- x=np.array(list/tuple)
- x=np.array(list/tuple, dtype=np.float32)
当 np.array() 不指定 dtype 时,NumPy 将根据数据情况关联一个 dtype 类型 实例:
- >>>x=np.array([1,2,3])>>>x
- array([1,2,3])>>> print(x)
- [1 2 3]>>>y=np.array([4,5,6])>>> print(y)
- [4 5 6]>>>z=np.array([[1,2],[3,4],(5,6)])>>> print(z)
- [[1 2]
- [3 4]
- [5 6]]
函数 | 说明 |
---|---|
np.arange(n) | 类似 range() 函数,返回 ndarray 类型,元素从 0 到 n‐1 |
np.ones(shape) | 根据 shape 生成一个全 1 数组,shape 是元组类型 |
np.zeros(shape) | 根据 shape 生成一个全 0 数组,shape 是元组类型 |
np.full(shape,val) | 根据 shape 生成一个数组,每个元素值都是 val |
np.eye(n) | 创建一个正方的 n*n 单位矩阵,对角线为 1,其余为 0 |
实例:
- >>>np.arange(10)
- array([0,1,2,3,4,5,6,7,8,9])>>>np.ones((3,4))
- array([[1.,1.,1.,1.],
- [1.,1.,1.,1.],
- [1.,1.,1.,1.]])>>>np.zeros((3,4),dtype=np.int32)
- array([[0,0,0,0],
- [0,0,0,0],
- [0,0,0,0]])>>>np.eye(5)
- array([[1.,0.,0.,0.,0.],
- [0.,1.,0.,0.,0.],
- [0.,0.,1.,0.,0.],
- [0.,0.,0.,1.,0.],
- [0.,0.,0.,0.,1.]])>>>x=np.ones((2,3,4))>>> print(x)
- [[[1.1.1.1.]
- [1.1.1.1.]
- [1.1.1.1.]]
- [[1.1.1.1.]
- [1.1.1.1.]
- [1.1.1.1.]]]>>>x.shape
- (2,3,4)
函数 | 说明 |
---|---|
np.ones_like(a) | 根据数组 a 的形状生成一个全 1 数组 |
np.zeros_like(a) | 根据数组 a 的形状生成一个全 0 数组 |
np.full_like(a,val) | 根据数组 a 的形状生成一个数组,每个元素值都是 val |
函数 | 说明 |
---|---|
np.linspace() | 根据起止数据等间距地填充数据,形成数组 |
np.concatenate() | 将两个或多个数组合并成一个新的数组 |
- >>>a=np.linspace(1,10,4)>>>a
- array([1.,4.,7.,10.])>>>b=np.linspace(1,10,4,endpoint=False)>>>b
- array([1. ,3.25,5.5,7.75])>>>c=np.concatenate((a,b))>>>c
- array([1. ,4. ,7. ,10. ,1. ,3.25,5.5,7.75])
方法 | 说明 |
---|---|
.reshape(shape) | 不改变数组元素,返回一个 shape 形状的数组,原数组不变 |
.resize(shape) | 与. reshape() 功能一致,但修改原数组 |
.swapaxes(ax1,ax2) | 将数组 n 个维度中两个维度进行调换 |
.flatten() | 对组进行数降维,返回折叠后的一维数组,原数组不变 |
- >>>a=np.ones((2,3,4), dtype=np.int32)>>>a.reshape((3,8))
- array([[1,1,1,1,1,1,1,1],
- [1,1,1,1,1,1,1,1],
- [1,1,1,1,1,1,1,1]])>>>a
- array([[[1,1,1,1],
- [1,1,1,1],
- [1,1,1,1]],
- [[1,1,1,1],
- [1,1,1,1],
- [1,1,1,1]]])>>>a.resize((3,8))>>>a
- array([[1,1,1,1,1,1,1,1],
- [1,1,1,1,1,1,1,1],
- [1,1,1,1,1,1,1,1]])
- >>>a=np.ones((2,3,4), dtype=np.int32)>>>a.flatten()
- array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])>>>a
- array([[[1,1,1,1],
- [1,1,1,1],
- [1,1,1,1]],
- [[1,1,1,1],
- [1,1,1,1],
- [1,1,1,1]]])>>>b=a.flatten()>>>b
- array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1])
- >>>a=np.ones((2,3,4), dtype=np.int32)>>>a.astype(np.float)
- array([[[1.,1.,1.,1.],
- [1.,1.,1.,1.],
- [1.,1.,1.,1.]],
- [[1.,1.,1.,1.],
- [1.,1.,1.,1.],
- [1.,1.,1.,1.]]])>>>a
- array([[[1,1,1,1],
- [1,1,1,1],
- [1,1,1,1]],
- [[1,1,1,1],
- [1,1,1,1],
- [1,1,1,1]]])
- >>>a=np.full((2,3,4),25,dtype=np.int)>>>a
- array([[[25,25,25,25],
- [25,25,25,25],
- [25,25,25,25]],
- [[25,25,25,25],
- [25,25,25,25],
- [25,25,25,25]]])>>>a.tolist()
- [[[25,25,25,25], [25,25,25,25], [25,25,25,25]], [[25,25,25,25], [25,25,25,25], [25,25,25,25]]]
索引:获取数组中特定位置元素的过程 切片:获取数组元素子集的过程 一维数组的索引和切片:与 Python 的列表类似 多维数组的切片也类似
数组与标量之间的运算作用于数组的每一个元素
函数 | 说明 |
---|---|
np.abs(x) np.fabs(x) | 计算数组各元素的绝对值 |
np.sqrt(x) | 计算数组各元素的平方根 |
np.square(x) | 计算数组各元素的平方 |
np.log(x) np.log10(x) np.log2(x) | 计算数组各元素的自然对数、10 底对数和 2 底对数 |
np.ceil(x) np.floor(x) | 计算数组各元素的 ceiling 值或 floor 值 |
np.rint(x) | 计算数组各元素的四舍五入值 |
np.modf(x) | 将数组各元素的小数和整数部分以两个独立数组形式返回 |
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x) | 计算数组各元素的普通型和双曲型三角函数 |
np.exp(x) | 计算数组各元素的指数值 |
np.sign(x) | 计算数组各元素的符号值,1(+), 0, ‐1(‐) |
- >>>a=np.arange(24).reshape((2,3,4))>>>np.square(a)
- array([[[0,1,4,9],
- [16,25,36,49],
- [64,81,100,121]],
- [[144,169,196,225],
- [256,289,324,361],
- [400,441,484,529]]], dtype=int32)>>>a=np.sqrt(a)>>>a
- array([[[0. ,1. ,1.41421356,1.73205081],
- [2. ,2.23606798,2.44948974,2.64575131],
- [2.82842712,3. ,3.16227766,3.31662479]],
- [[3.46410162,3.60555128,3.74165739,3.87298335],
- [4. ,4.12310563,4.24264069,4.35889894],
- [4.47213595,4.58257569,4.69041576,4.79583152]]])>>>np.modf(a)
- (array([[[0. ,0. ,0.41421356,0.73205081],
- [0. ,0.23606798,0.44948974,0.64575131],
- [0.82842712,0. ,0.16227766,0.31662479]],
- [[0.46410162,0.60555128,0.74165739,0.87298335],
- [0. ,0.12310563,0.24264069,0.35889894],
- [0.47213595,0.58257569,0.69041576,0.79583152]]]), array([[[0.,1.,1.,1.],
- [2.,2.,2.,2.],
- [2.,3.,3.,3.]],
- [[3.,3.,3.,3.],
- [4.,4.,4.,4.],
- [4.,4.,4.,4.]]]))
函数 | 说明 |
---|---|
+ ‐ * / ** | 两个数组各元素进行对应运算 |
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() | 元素级的最大值 / 最小值计算 |
np.mod(x,y) | 元素级的模运算 |
np.copysign(x,y) | 将数组 y 中各元素值的符号赋值给数组 x 对应元素 |
> < >= <= == != | 算术比较,产生布尔型数组 |
参考
http://www.mooc.cn/course/7848.html
来源: http://www.cnblogs.com/liutongqing/p/6980407.html