机器学习数据科学包——numpy


NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

创建数组

1、numpy.ndarray
ndarray 对象是用于存放同类型元素的多维数组,每个元素在内存中都有相同存储大小的区域。

>>> import numpy as np
>>> a = np.array([[10,20,30],[40,50,60],[70,80,90]])
>>> a
array([[ 0  1  2  3]
       [ 4  5  6  7]
       [ 8  9 10 11]])

#可以指定数据类型
>>> a = np.array([6,12,3],dtype=np.int)   
>>> a.dtype
int32
>>> a = np.array([6,12,3],dtype=np.float)   
>>> a.dtype
float64

2、numpy.empty
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组。
numpy.empty(shape, dtype = float, order = ‘C’)
order:有"C"和"F"两个选项,分别代表行优先和列优先,在计算机内存中的存储元素的顺序。

>>> a = np.empty([3,4],dtype=int)
>>> a
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])

3、numpy.zeros
创建指定大小的数组,数组元素以 0 来填充。
numpy.zeros(shape, dtype = float, order = ‘C’)
order:‘C’ 用于 C 的行数组,或者 ‘F’ 用于 FORTRAN 的列数组

>>> a = np.zeros((3,4))
>>> a
array([[0. 0. 0. 0.]
       [0. 0. 0. 0.]
       [0. 0. 0. 0.]])

4、numpy.ones
创建指定形状的数组,数组元素以 1 来填充。
numpy.ones(shape, dtype = None, order = ‘C’)

>>> a = np.ones((3,4))
>>> a
array([[1. 1. 1. 1.]
       [1. 1. 1. 1.]
       [1. 1. 1. 1.]])

5、numpy.arange
使用 arange 函数创建数值范围并返回 ndarray 对象。
numpy.arange(start, stop, step, dtype)

>>> a = np.arange(10,20,2)
>>> a
array([10, 12, 14, 16, 18])
>>> a = np.arange(12).reshape((3,4))
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

6、numpy.linspace
创建一个一维数组,数组是一个等差数列构成的。
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
num:要生成的等步长的样本数量,默认为50;
endpoint:该值为 true 时,数列中中包含stop值,反之不包含,默认是True;
retstep:如果为 True 时,生成的数组中会显示间距,反之不显示。

>>> a = np.linspace(1,10,4)
>>> a
array([ 1.  4.  7. 10.])

#可以通过reshape改变形状
>>> a = np.linspace(1,10,4).reshape((2,2))
>>> a
array([[ 1.  4.]
      [ 7. 10.]])

7、numpy.random.random
创建指定形状的随机数组。

>>> a = np.random.random((2,4))
>>> a
array([[0.51560035 0.90616572 0.58319964 0.10042999]
       [0.77632944 0.83235997 0.45486569 0.12400622]])

numpy数组属性

首先创建一个ndarray 对象

>>> array = np.array([[1,2,3],[2,3,4]])
>>> print(array)
[[1 2 3]
 [2 3 4]]

查看维数

>>> print('number of dim:',array.ndim)
number of dim: 2

查看形状

>>> print('shape:',array.shape)
shape: (2, 3)

查看容量

>>> print('size:',array.size)
size: 6

numpy基础运算

首先创建两个随机数组

>>> a = np.array([[10,20,30],[40,50,60],[70,80,90]])
>>> b = np.arange(1,10,1).reshape((3,3))
>>> print(a)
[[10 20 30]
 [40 50 60]
 [70 80 90]]
>>> print(b)
[[1 2 3]
 [4 5 6]
 [7 8 9]]

加法

>>> a + b
array([[11, 22, 33],
       [44, 55, 66],
       [77, 88, 99]])

减法

>>> a - b
array([[ 9, 18, 27],
       [36, 45, 54],
       [63, 72, 81]])

对应元素相乘

>>> a * b
array([[ 10,  40,  90],
       [160, 250, 360],
       [490, 640, 810]])

矩阵相乘

>>> np.dot(a,b) #也可写为a.dot(b)
array([[ 300,  360,  420],
       [ 660,  810,  960],
       [1020, 1260, 1500]])

对应元素相除

>>> a / b
array([[10., 10., 10.],
       [10., 10., 10.],
       [10., 10., 10.]])

各个元素的n次方

>>> b ** 2
array([[ 1,  4,  9],
       [16, 25, 36],
       [49, 64, 81]], dtype=int32)

最大值

>>> a.max() #也可写为np.max(a)
90

#可指定求行最大值或列最大值
np.max(a,axis=0) #每列最大值
array([70, 80, 90])
np.max(a,axis=1) #每行最大值
array([30, 60, 90])

最小值

>>> a.min() #也可写为np.min(a)
10

#可指定求行最小值或列最小值
np.min(a,axis=0) #每列最小值
array([10, 20, 30])
np.min(a,axis=1) #每行最小值
array([10, 40, 70])

求和

>>> a.sum() #也可写为np.sum(a)
450

#可指定求各行之和或各列之和
np.sum(a,axis=0) #每列之和
array([120, 150, 180])
np.sum(a,axis=1) #每行之和
array([ 60, 150, 240])

求均值

>>> a.mean() #也可写为np.mean(a)
50.0

#可指定求各行均值或各列均值
>>> np.mean(a,axis=0) #每列均值
array([40., 50., 60.])
>>> np.mean(a,axis=1) #每行均值
array([20., 50., 80.])

求中值

np.median(a)
50.0

#可指定求各行中值或各列中值
>>> np.median(a,axis=0) #每列中值
array([40., 50., 60.])
>>> np.median(a,axis=1) #每行中值
array([20., 50., 80.])

元素累加

>>> np.cumsum(a)
array([ 10,  30,  60, 100, 150, 210, 280, 360, 450], dtype=int32)

元素之差

>>> np.diff(a)
array([[10, 10],
       [10, 10],
       [10, 10]])

矩阵转置

>>> np.transpose(a) #也可写为a.T
array([[10, 40, 70],
       [20, 50, 80],
       [30, 60, 90]])

排序

>>> np.sort(a)
array([[10, 20, 30],
       [40, 50, 60],
       [70, 80, 90]])

固定元素范围

>>> np.clip(a,50,70) #小于50的元素变成50,大于70的元素变为70,位于中间的元素不变 
array([[50, 50, 50],
       [50, 50, 60],
       [70, 70, 70]])

三角函数

>>> np.sin(a) 
array([[-0.54402111,  0.91294525, -0.98803162],
       [ 0.74511316, -0.26237485, -0.30481062],
       [ 0.77389068, -0.99388865,  0.89399666]])
>>> np.cos(a)
array([[-0.83907153,  0.40808206,  0.15425145],
       [-0.66693806,  0.96496603, -0.95241298],
       [ 0.6333192 , -0.11038724, -0.44807362]])
>>> np.tan(a)
array([[ 0.64836083,  2.23716094, -6.4053312 ],
       [-1.11721493, -0.27190061,  0.32004039],
       [ 1.22195992,  9.00365495, -1.99520041]])       

查找最值索引

>>> np.argmin(a)
0
>>> np.argmax(a)
8

比较

>>> a < 50
array([[ True,  True,  True],
       [ True, False, False],
       [False, False, False]])
>>> a == 70
array([[False, False, False],
       [False, False, False],
       [ True, False, False]])     

numpy索引

>>> a 
array([[10, 20, 30],
       [40, 50, 60],
       [70, 80, 90]])

找出某一行

>>> a[2]
array([70, 80, 90])

找出某一列

>>> a[:,1]
array([20, 50, 80])

找出某一元素

>>> a[1][1]
50

找出某一范围内的元素

>>> a[1,0:2]
array([40, 50])

遍历出每一行

>>> for row in a:
>>>    print(row)
    
[10 20 30]
[40 50 60]
[70 80 90]

遍历出每一列

>>> for column in a.T:
>>>     print(column)
    
[10 40 70]
[20 50 80]
[30 60 90]

遍历出每一个元素

>>> for item in a.flat:
>>>     print(item,end=' ')
    
10 20 30 40 50 60 70 80 90 

numpy数组合并

>>> A = np.array([[1,1],[1,1]])
>>> B = np.array([[2,2],[2,2]])
>>> print(A)
[[1 1]
 [1 1]]
>>> print(B)
[[2 2]
 [2 2]]

np.vstack纵向合并

>>> C = np.vstack((A,B))
>>> print(C)
[[1 1]
 [1 1]
 [2 2]
 [2 2]]
>>> print(A.shape,B.shape,C.shape)
(2, 2) (2, 2) (4, 2)

np.hstack横向合并

>>> D = np.hstack((A,B))
>>> print(D)
[[1 1 2 2]
 [1 1 2 2]]
>>> print(A.shape,B.shape,D.shape)
(2, 2) (2, 2) (2, 4)

np.concatenate指定合并方式

>>> E = np.concatenate((A,B),axis=0)
>>> F = np.concatenate((A,B),axis=1)
>>> print(E.shape,F.shape)
(4, 2) (2, 4)

numpy数组分割

>>> A = np.arange(12).reshape((3,4))
>>> print(A)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

np.vsplit纵向分割

>>> np.vsplit(A,3)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

np.hsplit横向分割

>>> np.hsplit(A,2)
[array([[0, 1],
        [4, 5],
        [8, 9]]),
 array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]

np.split指定分割方式

>>> np.split(A,3,axis=0)
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

>>> np.split(A,2,axis=1)
[array([[0, 1],
        [4, 5],
        [8, 9]]),
 array([[ 2,  3],
        [ 6,  7],
        [10, 11]])]

注:以上三种方式只能进行对等分割,如果不能平均分割成指定的个数则会报错。
np.array_split可进行不对等分割,当不能均匀分割时,第一部分将得到更多的元素。

>>> np.array_split(A,3,axis=1) 
[array([[0, 1],
        [4, 5],
        [8, 9]]),
 array([[ 2],
        [ 6],
        [10]]),
 array([[ 3],
        [ 7],
        [11]])]

numpy数组的复制

1、赋值
将一个变量的值赋值给另一个变量,这两个变量本质上是一样的,共同指向同一个存储位置,改变一个变量,另一个也随之改变。

>>> a = np.arange(4)
>>> b = a
>>> a
array([0, 1, 2, 3])
>>> b
array([0, 1, 2, 3])
>>> a[0] = 11
>>> a
array([11,  1,  2,  3])
>>> b 
array([11,  1,  2,  3])
>>> b is a
True

2、.copy()深度复制
通过copy函数,两个变量虽然值相同,但本质上是不同的变量,互不影响。

>>> b = a.copy()
>>> a
array([0, 1, 2, 3])
>>> b
array([0, 1, 2, 3])
>>> a == b
array([ True,  True,  True,  True])
>>> a is b
False
>>> a[0] = 11
>>> a
array([11,  1,  2,  3])
>>> b
array([0, 1, 2, 3])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值