一篇文章让你快速入门Numpy

  • Numpy介绍
    • 什么是Numpy
    • Numpy为什么这么快
  • Numpy基本内容
    • 基本属性
      • 基本方法
      • 设置里面的数据形式
      • 简单的创建一个零矩阵和一矩阵
      • arange函数设定指定范围创建矩阵
      • 生成随机矩阵
    • 基础运算
      • 基本运算方法
      • numpy中的三角函数
      • 矩阵进行比较时会每个分别比较,返回bool值的同型矩阵
      • 利用numpy进行矩阵的乘积运算
      • 其余的运算函数
    • 索引
      • 一维操作
      • 二维操作
      • 其余函数
    • 分割和合并
      • 分割
      • 合并
    • copy&deep copy
  • 总结

Numpy介绍

什么是Numpy

Numpy是python中科学计算的基础包,提供多维数组对象,各种派生对象,以及用数组快速操作的各种API,在机器学习中,Numpy也较为重要,因此学习Numpy很有必要的。
具体的内容可以去官网看文档Numpy官方文档

Numpy为什么这么快

Numpy有着矢量化和广播的功能基础。
矢量化描述了代码中没有任何显式的循环,索引等 - 这些当然是预编译的C代码中“幕后”优化的结果。矢量化代码有许多优点,其中包括:
1.矢量化代码更简洁,更易于阅读
2.更少的代码行通常意味着更少的错误
3.代码更接近于标准的数学符号(通常,更容易正确编码数学结构)
4.矢量化导致产生更多 “Pythonic” 代码。如果没有矢量化,我们的代码就会被低效且难以阅读的for循环所困扰。
广播是用于描述操作的隐式逐元素行为的术语; 一般来说,在NumPy中,所有操作,不仅仅是算术运算,而是逻辑,位,功能等,都以这种隐式的逐元素方式表现,即它们进行广播。此外,在上面的例子中,a并且b可以是相同形状的多维数组,或者标量和数组,或者甚至是具有不同形状的两个数组,条件是较小的数组可以“扩展”到更大的形状。结果广播明确无误的方式。

Numpy基本内容

在使用之前,我们先把Numpy包下载并导入
pip install numpy

基本属性

下面是一些方法,如果有的参数不懂可以使用help函数进行解决

基本方法

print(help(np.array()))
'''我们习惯性的将numpy简写为np'''
import numpy as np
# 做一个简单的矩阵模型
array = np.array([[1, 2, 3],
                  [2, 3, 4]])
print(array)
print('number of dim:', array.ndim)# 返回维度
print('shape:', array.shape)# 返回形状
print('size:', array.size)# 返回元素数

设置里面的数据形式

b = np.array([2, 3, 1], dtype=np.int64)# 修改形式
print(b.dtype)

简单的创建一个零矩阵和一矩阵

c = np.zeros((3, 4))
print(c)
d = np.empty((3, 4))
print(d)
# 上面两个都是创建0矩阵
# 创建1矩阵
e = np.ones((3,4))
print(e)

arange函数设定指定范围创建矩阵

e = np.arange(10, 20, 2)
# 最后一个参数为步长
print(e)

# 我们仍然可以改变它的形状
f = np.arange(12).reshape((3, 4))
print(f)

# numpy还支持分割数字的方法来创建矩阵
g = np.linspace(1, 10, 5)# 把数字分成5份
print(g)
h = np.linspace(1, 10, 6).reshape((2, 3))
print(h)

生成随机矩阵

a = np.random.random((2, 4))

基本内容到这就结束了,如果了解更多可以使用help函数或者查看官方文档

基础运算

基本运算方法

'''我们要知道,对于numpy矩阵进行整体运算时实际上就是对每一个变量进行运算'''
# 首先我们先定义两个同型矩阵变量
a = np.array([10, 20, 30, 40])
b = np.arange(4)
# 我们可以让他们进行简单的加减乘除运算,对应位置发生运算
c = a - b
d = b**2
print(c)
print(d)
[10 19 28 37]
[0 1 4 9]

numpy中的三角函数

e = 10*np.sin(a)
print(e)
[-5.44021111  9.12945251 -9.88031624  7.4511316 ]

矩阵进行比较时会每个分别比较,返回bool值的同型矩阵

print(b<3)
[ True  True  True False]

利用numpy进行矩阵的乘积运算

a = np.array([[1, 1], [0, 1]])
b = np.arange(4).reshape((2, 2))

print(a, '\n', b)

c = a*b# 每个分量相乘
cDot2 = a.dot(b)# 我们所熟悉的矩阵乘法

print(c, '\n', cDot2)

[[1 1]
 [0 1]] 
 [[0 1]
 [2 3]]
 
[[0 1]
 [0 3]] 

[[2 4]
 [2 3]]

其余的运算函数

'''
求和np.sum()
最值np.min()
利用axis=1可求每一行,=0每一列
'''
A = np.arange(2, 14).reshape(3, 4)
print(A)
print(np.argmin(A))# 打印最小值的索引,最大值相似
print(np.mean(A))# 计算平均值
print(np.average(A))# 计算平均值
print(np.median(A))# 中位数
print(np.cumsum(A))# 逐个累加
print(np.diff(A))# 逐减
print(np.nonzero(A))# 返回非零数的坐标,两者分开了
print(np.sort(A))#排序,逐行排序
print(np.transpose(A))# 矩阵的转置
print(np.clip(A, 5, 10))# 我们统一矩阵,小于五的变成五,大于10的变成10,中间的不变
# 可以修改axis进行行列计算

索引

numpy创建的数组同样支持索引和切片,由于是多维数组在操作上可能有些不同

一维操作

a = np.arange(3, 15)
print(a)
print(a[3])
print(a[1:2])
[ 3  4  5  6  7  8  9 10 11 12 13 14]
6
[4]

二维操作

A = np.arange(3, 15).reshape(3, 4)
print(A[2][1])
# 对于二维数组的切片可以有两个参数,第一个参数是选择的行,第二个是列
print(A[:,2])
print(A[1, 1:2])
12
[ 5  9 13]
[8]

其余函数

for column in A.T:# 转置
    print(column)
    
print(A.flatten())# 变成一行

for item in A.flat:
    print(item)

分割和合并

分割

numpy中提供了split函数进行分割

A = np.arange(12).reshape((3, 4))

print(A)
print(np.split(A, 2, axis=1))#横向分割
print(np.split(A, 3, axis=0))# 纵向分割
'''用上面的两个函数时要注意分割均等,但是如果不知道他的形状怎么办?
下面的函数支持不均等的分割
'''
print(np.array_split(A, 3, axis=1))

# 对于分割,我们可以用下面的函数直接对行或列进行分割不必进行参数设置
print(np.vsplit(A, 3))#纵向
print(np.hsplit(A, 2))# 横向

合并

A = np.array([1, 1, 1])
B = np.array([2, 2, 2])
print(np.vstack((A, B)))# 竖直合并
print(np.hstack((A, B)))# 水平合并

# 还有一个函数np.newaxis
'''对于[: , np.newaxis] 和 [np.newaxis,:]
是在np.newaxis这里增加1维。'''
print(A[:, np.newaxis])#列加了一个维度
A = A[:, np.newaxis]
B = B[:, np.newaxis]
C = np.concatenate((A, A, B), axis=1)# 合并时可以选择维度
print(C)

copy&deep copy

在numpy中如果我们直接进行赋值使得两个矩阵相同,那么他们的变化就会相关联,如果不希望如此,我们可以用a.copy的方法进行复制

import numpy as np
a = np.arange(4)
b = a
c = a
d = b
a[0] = 11
# 此时他们都会发生改变
# 如果不想关联可以使用这个方法
b= a.copy()

总结

numpy的基本内容就是这些了,如果有一些地方错误的话欢迎大家指正。

你可能感兴趣的:(经验分享,机器学习,python,python,机器学习,numpy)