Numpy包的基础使用(小白笔记)

Numpy 包的基础使用

一、Numpy及其数据容器

Numpy(Numerical Python)是python数值计算中最重要的包,ndarray 数据容器可以存储n维数组是其核心特征之一。

二、生成ndarray数组

1.生成一个一维数组

import numpy as np
array = np.array([1, 2, 3, 4, 5])
print(array)
print(type(array))  
[1 2 3 4 5]
<class 'numpy.ndarray'>

2.ndarray的一些基本属性

shape、reshape
import numpy as np
array1 = np.array([1, 2, 3, 4, 5])
array2 = np.array([[1, 2, 3, 4, 5]])
array3 = np.array([[1, 2, 3], [4, 5, 6]])
print(array1.shape)
print(array2.shape)
print(array3.shape)
(5,)
(1, 5)
(2, 3)

如何修改shape
可以直接修改shape或者用reshape修改
如果想增加维度可以用newaxis
如果想减少维度可以用squeeze

import numpy as np
array = np.arange(20)
print(array)
array.shape = 4, 5
print(array)
array = array.reshape(2, 10)
print(array)
array = array[np.newaxis, :]
print(array)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
[[[ 0  1  2  3  4  5  6  7  8  9]
  [10 11 12 13 14 15 16 17 18 19]]]
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]]
dtype、astype

dtype是ndarray的数据类型

类型解释
int8、int16、int32、int64有符号整数
uint8、uint16、uint32、unint64无符号整数
float16、float32、float64、float浮点数
complex64、complex128、complex256浮点复数
bool布尔值
objectpython object类型
astype可以修改数组的dtype类型
import numpy as np
array = np.array([1, 2, 3, 4, 5])
print(array.dtype)
print(array)
array = array.astype(np.float16)
print(array.dtype)
print(array)
array = array.astype(np.bool_)
print(array.dtype)
print(array)
int32
[1 2 3 4 5]
float16
[1. 2. 3. 4. 5.]
bool
[ True  True  True  True  True]
size、itemsize、nbytes、ndim
import numpy as np
array = np.array([1, 2, 3, 4, 5])
print(f"数组元素的个数{array.size}")
print(f"数组每个元素所占位数{array.itemsize}")
print(f"数组所占位数{array.nbytes}")
print(f"数组的维度{array.ndim}")
数组元素的个数5
数组每个元素所占位数4
数组所占位数20
数组的维度1

3.生成特定数组

arange

类似于python中的range

import numpy as np
array1 = np.arange(0, 10, 2, dtype=np.int8)
[0 2 4 6 8]
linesapce和logspace

linesapce是线性空间生成数列
logspace是对数空间生成数列

import numpy as np
array2 = np.linspace(1, 10, 10, dtype=np.int8)
array3 = np.logspace(0, 10, 11, base=2, dtype=np.int16)
print(array2)
print(array3)
[ 1  2  3  4  5  6  7  8  9 10]
[   1    2    4    8   16   32   64  128  256  512 1024]
zeros、ones、empty、fill、full

可以生成指定形状的全0、全1、空的数组
fill方法可以将空数组填充
full可以生成指定形状、指定数据填充的数组

import numpy as np
array4 = np.zeros(3, dtype=np.int16)
array5 = np.zeros((3, 3), dtype=np.int16)
array6 = np.ones((3, 3), dtype=np.int16)
array7 = np.empty((3,3), dtype=np.int16)
array7.fill(1)
array8 = np.full((3, 2), 1, dtype=np.int8)
print(array4)
print(array5)
print(array6)
print(array7.shape)
print(array8)
[0 0 0]

[[0 0 0]
 [0 0 0]
 [0 0 0]]
 
[[1 1 1]
 [1 1 1]
 [1 1 1]]
 
 (3, 3)
 
 [[1 1 1]
 [1 1 1]
 [1 1 1]]

[[1 1]
 [1 1]
 [1 1]]
zeros_like、ones_like、empty_like、full_like

zeros_like、ones_like、empty_like可以生成形似指定数组的全0、全1、空的数组
full_like可以生成形似指定数组的、指定数字填充的数组

import numpy as np
array9 = np.array([1, 2, 3, 4, 5])
print(np.zeros_like(array9))
print(np.ones_like(array9))
print(np.empty_like(array9).shape)
print(np.full_like(array9, 9))
[0 0 0 0 0]
[1 1 1 1 1]
(5,)
[9 9 9 9 9]
identity、eye

生成单位对角阵

import numpy as np
print(np.identity(3, dtype=np.int8))
print(np.eye(3, dtype=np.int8))
[[1 0 0]
 [0 1 0]
 [0 0 1]]
[[1 0 0]
 [0 1 0]
 [0 0 1]]
copy

拷贝操作

import numpy as np
array0 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array1 = array0.copy()
print(array1)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
索引
import numpy as np
array0 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(array0)
# 切片操作
print(array0[0, 0:2])
# 布尔类型做索引
grades = np.arange(0, 100, 10)
print(grades)
mask = np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1], dtype=bool)
print(mask)
print(grades[mask])
# where获得指定范围的索引
print(np.where(grades >= 60))
print(grades[np.where(grades >= 60)])
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[1 2]
[ 0 10 20 30 40 50 60 70 80 90]
[False False False False False False  True  True  True  True]
[60 70 80 90]
(array([6, 7, 8, 9], dtype=int64),)
[60 70 80 90]

4.数组连接

concatenate

默认axis=0也就是竖着拼接

import numpy as np
a = np.array([[123, 456, 789],[3214, 456, 134]])
b = np.array([[12345, 3214, 432], [43, 13, 134]])
print(np.concatenate((a, b)))
print(np.concatenate((a,b), axis=1))
[[  123   456   789]
 [ 3214   456   134]
 [12345  3214   432]
 [   43    13   134]]
[[  123   456   789 12345  3214   432]
 [ 3214   456   134    43    13   134]]
vstack、hstack

vstack竖着拼接
hstack横着拼接
效果和concatenate一样

flatten展平
import numpy as np
a = np.array([[123, 456, 789],[3214, 456, 134]])
b = np.array([[12345, 3214, 432], [43, 13, 134]])
c = np.concatenate((a, b))
print(c.flatten())
[  123   456   789  3214   456   134 12345  3214   432    43    13   134]

5.随机模块

rand、randint、rand_sample

rand从均匀分布中抽取样本
randint可以指定形状,指定整数元素取值的数组
rand_sample可以生成[0, 1)的随机样本,服从标准高斯分布

import numpy as np
print(np.random.rand(2, 3))
print(np.random.randint(2, 5, size=(3, 4)))
print(np.random.random_sample())
[[0.01658336 0.34363667 0.48712169]
 [0.14213359 0.35238332 0.76169609]]
[[4 4 2 3]
 [3 2 2 4]
 [3 3 2 4]]
 0.7775361861439255
normal、shuffle

normal生成高斯分布
shuffle可以对数组洗牌乱序

import numpy as np
mu, sigma = 0, 0.1
print(np.random.normal(mu, sigma, 10))
array0 = np.arange(10)
print(array0)
np.random.shuffle(array0)
print(array0)
[ 0.0371535  -0.06437915 -0.11585887  0.10579892 -0.02946518  
  0.02704959 0.00949664 -0.0743719    0.00934385  0.05748404]
[0 1 2 3 4 5 6 7 8 9]
[5 6 3 2 1 9 4 7 0 8]
其他

binomial 二项分布抽取样本
beta 从β分布中抽取样本
chisquare 从卡方分布中抽取样本
gamma 从γ分布中抽取样本
uniform 从均匀分布[0, 1)中抽取样本

三、数组的算术

1.等尺寸数组基本运算

ndarray数组可以与数或与其等尺寸的数组进行加、减、乘、除、乘方的自由运算
运算规则是逐个元素进行运算
比较运算(==、>、<、>=、<=)会产生布尔值数组
也可以进行逻辑运算

import numpy as np
array0 = np.array([1, 2, 3, 4, 5])
array1 = array0 + 1
array2 = array0 + array0
array3 = array0 * array0
array4 = array0 > array0
print(array1)
print(array2)
print(array3)
print(array4)

x = np.array([1, 1, 2, 0, 1])
y = np.array([1, 1, 4, 1, 0])
print(np.logical_and(x, y))
print(np.logical_or(x, y))
print(np.logical_xor(x, y))
print(np.logical_not(x))
[2 3 4 5 6]
[ 2  4  6  8 10]
[ 1  4  9 16 25]
[False False False False False]

[ True  True  True False False]
[ True  True  True  True  True]
[False False False  True  True]
[False False False  True False]

2.数组内部元素运算

求和、求积

可以数组内全部元素求和,也可以求列之和、行之和
sum方法求和与prod方法求积用法一样

import numpy as np
array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
all_sum = np.sum(array)
y_sum = np.sum(array, axis=0)
x_sum = np.sum(array, axis=1)
print(f"all_sum = {all_sum}")
print(f"y_sum = {y_sum}")
print(f"x_sum = {x_sum}")
all_sum = 45
y_sum = [12 15 18]
x_sum = [ 6 15 24]
求最大、最小及其索引

与sum方法使用类似
min、max用于求最小、最大元素
argmin、argmax用于求最小、最大元素对应索引

import numpy as np
array0 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.min(array0))
print(np.min(array0, axis=0))
print(np.min(array0, axis=1))
1
[1 2 3]
[1 4 7]
求均值、标准差、方差

与sum方法使用类似
mean求均值
std求标准差
var求方差

import numpy as np
array0 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(np.mean(array0))
print(np.mean(array0, axis=0))
print(np.mean(array0, axis=1))
5.0
[4. 5. 6.]
[2. 5. 8.]
其他逐元素操作

abs、sqrt、square、exp
log、log10、log2、log1p
sign、ceil、floor
rint保留整数位,维持dtype
modf小数部分、和整数部分分开返回
各类三角函数

截断、四舍五入
import numpy as np
array0 = np.array([[1.2, 3.56, 7.89], [1.89, 3.12, 7.56]])
print(array0)
print(np.clip(array0, 2, 4))
print(np.round(array0, decimals=1))
[[1.2  3.56 7.89]
 [1.89 3.12 7.56]]
[[2.   3.56 4.  ]
 [2.   3.12 4.  ]]
[[1.2 3.6 7.9]
 [1.9 3.1 7.6]]
排序

sort方法与sum使用方法类似,并且默认降序
searchsorted是找到应该插入位置的索引

import numpy as np
array0 = np.array([[1.5, 1.3, 7.5],[5.6, 7.8, 1.2]])
print(array0)
print(np.sort(array0))
print(np.sort(array0, axis=0))
array1 = np.linspace(0, 10, 10)
values = np.array1([2.5, 6.5, 9.5])
print(np.searchsorted(array1, values))
[[1.2  3.56 7.89]
 [1.89 3.12 7.56]]
[[2.   3.56 4.  ]
 [2.   3.12 4.  ]]
[[1.2 3.6 7.9]
 [1.9 3.1 7.6]]

四、线性代数中应用

1.向量的内积

import numpy as np
x = np.array([2, 2])
y = np.array([5, 5])
print(np.dot(x, y))
20

2.矩阵点乘

import numpy as np
x = np.array([2, 2])
y = np.array([5, 5])
x = x.reshape(2, 1)
y = y.reshape(1, 2)
print(np.dot(x, y))
[[10 10]
 [10 10]]

3.其他常用

diag 对角线元素返回一维数组,或将一维数组转换成对角阵
trace 求迹,对角元素之和
det 求行列式
eig 求特征值和特征向量
inv 求逆
pinv 求Moore-Penrose伪逆
qr 计算QR分解
svd 计算奇异值分解(SVD)
solve 求解Ax = b
lstsq 求Ax = b 的最小二乘解

  • 21
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿卡不吃秋葵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值