numpy的学习

ndarray的属性

属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray对象的尺度,对于矩阵,n行m列
.sizendarray对象元素的个数,相等于.shape中n*m的值
.dtypendarray对象的元素类型
.itemsizendarray对象中每个元素的大小。以字节为单位

import numpy as np 

a=np.array([[0,1,2,3,4],[9,8,7,6,5]])

a
Out[3]: 
array([[0, 1, 2, 3, 4],
       [9, 8, 7, 6, 5]])

a.ndim
Out[4]: 2

a.shape
Out[6]: (2, 5)

a.size
Out[7]: 10

a.dtype
Out[8]: dtype('int32')

a.itemsize
Out[9]: 4

ndarray的元素类型

数据类型说明
bool布尔类型,True或False
intc与C语言中的int类型一致,一般是int32或Int64
intp用于索引的整数,与C语言中的ssize_t一致,int32或int64
int8字节长度的整数,取值:[-127,128]
int1616位的长度的整数,取值[-3276832767]
int3232位长度的整数,取值:[-231, -231-1]
int6464位的长度的整数,取值[-263 ,263-1]

ndarray的元素类型

数据类型说明
uint88位无符号整数,取值:[0,255]
uint1616位无符号整数,取值:[0,65535]
uint3232位无符号整数,取值:[0,232-1]
uint6432位无符号整数,取值:[0,264-1]
float1616位半精度浮点数,1位符号位,5位指数,10位尾数
float3232位半精度浮点数,1位符号位,8位指数,23位尾数
float6464位半精度浮点数,1位符号位,11位指数,52位尾数
complex64复数类型,实部和虚部都是32位的浮点数
complex128复数类型,实部和虚部都是64位的浮点数

实数(.real)+j虚部(.imag)

ndarray数组的创建方法:

(1)从python中的列表,元组类型创建的ndarray数组,
x=np.array(list/tuple)
x=np.array(list/tuple,dtype=np.float32)
当np.array()不指定dtype的时候,Numpy将根据情况关联一个dtype类型

  • 从列表创建:
    x=np.array([0,1,2,3])
  • 从元组类型创建
    np.array((4,5,6,7))
  • 从列表和元组混合类型创建
print(np.array([[1,2],[9,8],(0.1,2.3)]))
[[1.  2. ]
 [9.  8. ]
 [0.1 2.3]]

记得列表和元组的类型同质,长度一致

(2) 使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等

函数说明
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) Out[21]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

np.ones((3,6))
Out[28]: 
array([[1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.],
       [1., 1., 1., 1., 1., 1.]])
np.zeros((3,6),dtype=np.int32)
Out[29]: 
array([[0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0]])
np.eye(5)
Out[30]: 
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.]])
单位矩阵
Out[31]: 
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.]]])

(3)使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等

函数说明
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,dtype=np.int32)
a=np.linspace(1,10,4,dtype=np.int32,endpoint=False)

print(a)
[1 3 5 7]

a=np.linspace(1,10,4,endpoint=False)

print(a)
[1.   3.25 5.5  7.75]

print(np.concatenate((A,B)))
[ 1.    3.25  5.5   7.75  1.    4.    7.   10.  ]

ndarray数组的维度变换

函数说明
.reshape(shape)不改变数组,返回一个shape形状的数组,原数组不变
.resize(shape)与.reshape()功能一致,但修改原数组
np.full_like(a,val)根据数组a的形状生成一个数组,每个元素都是val
np.swapaxes(ax1,ax2)将数组的n个维度进行调换
np.flatten()对数组进行降维,返回折叠后的一维数组,原数组不变
a=np.ones((2,3,4),dtype=np.int32)

print(a)
[[[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.reshape((3,8))
Out[57]: 
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]])

resize改变原数组


a.resize((4,6))

print(a)
[[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.flatten()
Out[60]: 
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])

ndarray数组的类型变换

new_a=a.astype(new_type)

a.astype(np.float)
Out[63]: 
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.]])

ndarray数组向列表的转换

ls=a.tolist()


a.tolist()
Out[65]: 
[[1, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1, 1],
 [1, 1, 1, 1, 1, 1]]

数组的索引和切片

索引:获取数组中特定位置元素的过程

切片:获取数组中元素自己的过程
一维数组的索引和切片:与python的列表类似


a=np.array([9,8,7,6,5])

a
Out[75]: array([9, 8, 7, 6, 5])

a[2]
Out[76]: 7

a[1:4:2]
Out[77]: array([8, 6])```

a=np.arange(24)

a
Out[80]: 
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23])

a.reshape(3,8)
Out[81]: 
array([[ 0,  1,  2,  3,  4,  5,  6,  7],
       [ 8,  9, 10, 11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20, 21, 22, 23]])

《numpy的学习》 image.png
《numpy的学习》 image.png

数组的运算

数组与标量之间的运算作用于数组的每一个元素

a.mean()
Out[90]: 11.5
平均值

计算a与元素平均值的商
a=a/a.mean()

a=a/a.mean()

a
Out[93]: 
array([[0.        , 0.08695652, 0.17391304, 0.26086957, 0.34782609,
        0.43478261, 0.52173913, 0.60869565],
       [0.69565217, 0.7826087 , 0.86956522, 0.95652174, 1.04347826,
        1.13043478, 1.2173913 , 1.30434783],
       [1.39130435, 1.47826087, 1.56521739, 1.65217391, 1.73913043,
        1.82608696, 1.91304348, 2.        ]])

Numpy一元函数

函数说明
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(-)
np.modf(a)
Out[98]: 
(array([[0., 0., 0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0., 0., 0.]]),
 array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.],
        [ 8.,  9., 10., 11., 12., 13., 14., 15.],
        [16., 17., 18., 19., 20., 21., 22., 23.]]))

np.square(a)
Out[100]: 
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)

numpy的二元函数

函数说明
+ – * / **两个数组各元素进行对应运算
np.maximun(x,y) np.fmax() np. minmun(x,y) np.fmin()元素级的最大值/最小值的计算
np.mod(x,y)元素级的摸运算
np.copysign(x,y)将数组y中各元素值的符号复制给数组x对应的元素
> < >= <= == !=算术比较,产生布尔型的数组
    原文作者:xm的那年
    原文地址: https://www.jianshu.com/p/11dffa3ae43a#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞