Numpy学习笔记整理,基于B站千锋教育

千锋教育NumPy教程,保姆级基础入门Python数据分析_哔哩哔哩_bilibili

目录

1.numpy的导入

 2.numpy的数组创建

 3.numpy的常用属性

 4.numpy的索引和切片

5.numpy的数组变形、合并、拆分

6.numpy的赋值和深拷贝

7.numpy的聚合

7.numpy的矩阵操作(矩阵,广播,其他)

8.numpy的数组快速排序

9.numpy的文件操作

10.numpy的练习

10.1 创建一个长度为10的一维全部为0 的ndarray对象,然后让第5个元素等于1

10.2 创建一个元素为10到49的ndarray对象

10.3 将第2题的所有元素位置反转

10.4 使用np.random.random创建一个10*10的ndarray对象,并且打印出最大最小元素

10.5 创建一个10*10的ndarray对象,且矩阵边界都是1,里边全是0

10.6 创建一个每一行都是从0到4的5*5矩阵

10.7 创建一个范围在(0,1)之间的长度为12的等差数列

10.8 创建一个长度为10的随机数组并且排序

10.9 创建一个长度为10 的随机数组并且将最大值替换成0

10.10 给定一个4维矩阵,如何得到最后两维的和?

10.11 给定数组[1,2,3,4,5],如何得到这个数组的每个元素之间插入3个0后的新数组?

10.12 给定一个二维矩阵,如何交换其中两行的元素

10.13 创建一个100000长度的随机数组,使用两种方法对其求三次方,并且比较使用的时间

10.14 创建一个5*3 的随机矩阵和一个3*2的随机矩阵,求矩阵的积

10.15 矩阵的每一行的元素都减去该行的平均值

10.16 打印出一下矩阵(要求使用np.zeros创建8*8的矩阵)

10.17 正则化一个5*5的随机矩阵

正则的概念:假设a是矩阵中的一个元素,max/min分别是矩阵的元素的最大值与最小值,则正则化后a = (a - min) /(max - min)


1.numpy的导入

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

cat = plt.imread('cat.jpg')  # 读取图片数据
# print('cat:', cat, '\n')   # 图片由数字组成,三维数组(0-255--->>rgb)
print('type(cat):', type(cat), '\n')  # nd-->>多维  array-->>数组
print('cat.shape:', cat.shape, '\n')  # 查看维度,三个数字代表三个维度,421行,725列,3代表RGB颜色的数值

# 显示图片
plt.imshow(cat)  # 三维彩色,二维黑白
plt.show()
# 视频:四维数据(x,421,725,3), x:帧数

2.numpy的数组创建

1使用np.array() 由python list

l = [1, 4, 2, 3, 5, 6]
n = np.array(l)
print("n:", n, '\n')
print("type(n):", type(n), '\n')  # 类型
print("n.shape:", n.shape, '\n')  # 维度
# -----类型------
n = np.array([3.14, 2])

2
使用np.ones(shape, dtype=None, order='C')
1
所有元素都为1
2
shape:形状
3
dtype:None: 元素类型
4
order:{'C', 'F'},可选,默认值:C是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据,一般默认就行
n = np.ones(shape=(3, 4), dtype=np.int16)
print("n:", n, '\n')
3
使用np.zeros(shape, dtype=float)
1
所有元素都为0
2
shape:形状
3
dtype:None: 元素类型

n = np.zeros(shape=(3, 4), dtype=np.int16)
print("n:", n, '\n')
4
使用np.full(shape,fill_value, dtype=float, order='C')
1
所有元素都为填充值
2
shape:形状
3
dtype:None: 元素类型
4
fill_value: 填充值
5
order:{'C', 'F'},可选,默认值:C是否在内存中以行主(C-风格)或列主(Fortran-风格)顺序存储多维数据,一般默认就行

n = np.full(shape=(3, 4), fill_value=8, dtype=np.int16)
print("n:", n, '\n')
5
使用np.eye(N, M=None, k=0, dtype=float)
1
对角线为1,其他位置为0
2
N:行
3
M:列数,默认为None,表示行列一样
4
k: 向右偏移0个位置
5
dtype:None: 元素类型

n = np.eye(3, 4, k=1,  dtype=np.int8)  # 单位矩阵, 一般不偏移
print("n:", n, '\n')
6
使用np.linspace(start, stop, num=50, endpoint=Ture, restep=Flase, dtype=None)
1
等差数列
2
start:开始
3
stop:结束
4
num:等差数列中有50个数字,默认50
5
endpoint: 是否包含结束值
6
restep:是否返回等差值(步长)
7
dtype:None: 元素类型

n = np.linspace(0, 100, num=51, retstep=True, dtype=np.int8)  # 单位矩阵, 一般不偏移
print("n:", n, '\n')
7
使用np.arange(start, stop, step, dtype=None)
1
创建一个数值范围的数组,和range功能类似, [start,stop)
2
start:开始
3
stop:结束
4
step:步长
5
dtype:None: 元素类型

n1 = np.arange(10)  # 0-9
print("n1:", n1, '\n')

n2 = np.arange(2, 10, 2)  # 2,4,6,8
print("n2:", n2, '\n')
8
使用np.random.randint(low, high=None, size=None, dtype=None)
1
创建一个随机整数数组
2
low:最小值
3
high=None:最大值
high=None时, 生成的数据在[0,low)区间内
如果使用high,生成的数据在[low,high)区间内
4
size=None:数组形状,默认只输出一个随机值
5
dtype:None: 元素类型

n1 = np.random.randint(10)  # 0-9中随机一个数字
print("n1:", n1, '\n')

n2 = np.random.randint(3, 10, size=(3, 4))  # 二维数组
print("n2:", n2, '\n')

n3 = np.random.randint(0, 256, size=(20, 40, 3))  # 三维数组
plt.imshow(n3)
plt.show()

9
使用np.random.randn(d0,d1,....,dn)
1
服从一个标准正态分布的多维数组,0是均值,1是标准差的正态分布
2
dn:第n个维度的数值

n1 = np.random.randn()  # 产生一个数
print("n1:", n1, '\n')

n2 = np.random.randn(10)  # 产生十个个数
print("n2:", n2, '\n')

n3 = np.random.randn(3, 4)
print("n3:", n3, '\n')
10
使用np.random.normal(loc=0.0, scale=1.0, size=None)
1
服从一个正态分布的多维数组
2
loc:平均值
3
scale:标准差,越大曲线越矮,越小曲线越高
4
size=None:数组形状

n1 = np.random.normal()  # 产生一个数
print("n1:", n1, '\n')

n2 = np.random.normal(loc=100, scale=10, size=(3, 4))
print("n2:", n2, '\n')
11
使用np.random.random(size=None)
1
[0,1)的随机数的多维数组
2
size=None:数组形状

n1 = np.random.random()  # 产生一个数
print("n1:", n1, '\n')

n2 = np.random.random(size=(3, 4))
print("n2:", n2, '\n')
12
使用np.random.rand(d0,d1,....,dn)
1
[0,1)的随机数的多维数组,与np.random.random功能类似
2
dn:n个维度

n1 = np.random.rand()  # 产生一个数
print("n1:", n1, '\n')

n2 = np.random.rand(3, 4)
print("n2:", n2, '\n')

3.numpy的常用属性

1
.ndim
维度,3代表三维
2
.shape
形状(各维度的长度),有三个数字代表三维
3
.size
915675,总的数据量,总的个数
4
.dtype
类型,unit8

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

cat = plt.imread('cat.jpg')

print('cat.ndim:', cat.ndim, '\n')  # 维度,3代表三维
print('cat.shape:', cat.shape, '\n')  # 形状(各维度的长度),有三个数字代表三维
print('cat.size:', cat.size, '\n')  # 915675,总的数据量,总的个数
print('cat.dtype:', cat.dtype, '\n')  # 类型,unit8

4.numpy的索引和切片

numpy的索引
一维
n[0]
第一个
n[-1]
最后一个
二维
n1[3][4] / n1[3, 4]
第四行,第五列
n1[-1][-1]
最后一行,最后一列
三维
n2[1][2][-1]
n2[1, 2, -1] 
 n2[1, 2, -1] = 886
改变指定数字
n2[1, 2] = 100

mport numpy as np
import pandas as pd
import matplotlib.pyplot as plt

'''
    1.一维
'''
l = [1, 2, 3, 4]
print('l[0]:', l[0], '\n')
n = np.array(l)
print('n[0]:', n[0], '\n')
print('n[-1]:', n[-1], '\n')  # 一维和列表差不多

'''
    2.二维
'''
n1 = np.random.randint(0, 10, size=(4, 5))
print('n1:', n1, '\n')
# 找到最后一个数字’
print('n1[3][4]:', n1[3][4], '\n')  # 和下边一样的
print('n1[-1][-1]:', n1[-1][-1], '\n')   # 先行后列
print('n1[3, 4]:', n1[3, 4], '\n')  # 和上边一样的

'''
    3.三维
'''
n2 = np.random.randint(0, 100, size=(4, 5, 6))
print('n2:', n2, '\n')
#
print('n2[1][2][-1]:', n2[1][2][-1], '\n')  # 三个数字按照上边的三个维度的顺序来
print('n2[1, 2, -1]:', n2[1, 2, -1], '\n')

n2[1, 2, -1] = 886  # 改变指定数据
print('n2:', n2, '\n')

n2[1, 2] = 100   # 也可以一个一个指定[1,2,3,4,5,6]
print('n2:', n2, '\n')
numpy的切片
一维
n[2:6]
n[::-1]
翻转
二维
n1[0]
第一行
n1[1:4]
二到四行
n1[[1, 2, 4]]
不连续的三行
n1[:,0]
第一列
n1[:,1:4]
二到四列
n1[:, [1, 2, 4]]
不连续的三列

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
'''
    1.一维
'''
# 一维与列表完全一致
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print('l[2:6]:', l[2:6], '\n')  # [3, 4, 5, 6]
print('l[::-1]:', l[::-1], '\n')  # 列表翻转,[9, 8, 7, 6, 5, 4, 3, 2, 1]

n = np.array(l)
print('n:', n, '\n')
print('n[2:6]:', n[2:6], '\n')  # [3, 4, 5, 6]
print('n[::-1]:', n[::-1], '\n')  # 列表翻转,[9, 8, 7, 6, 5, 4, 3, 2, 1]

'''
    2.二维
'''
n1 = np.random.randint(0, 10, size=(6, 8))
print('n1:', n1, '\n')
# 行
print('n1[0]:', n1[0], '\n')  # 取第一行
print('n1[1:4]:', n1[1:4], '\n')  # 取二到四行
print('n1[[1, 2, 4]]:\n', n1[[1, 2, 4]], '\n')  # 取不连续的三行,也可以重复取
# 列
n2 = np.random.randint(0, 10, size=(6, 8))
print('n2:', n2, '\n')
print('n1[:,0]:', n1[:, 0], '\n')  # 取第一列
print('n1[:,1:4]:', n1[:, 1:4], '\n')  # 取二到四列
print('n1[:, [1, 2, 4]]:\n', n1[:, [1, 2, 4]], '\n')  # 取不连续的三列,也可以重复取
图片的变形
图片上下翻转
cat[::-1]
图片左右翻转
cat[:, ::-1]
图片颜色翻转
cat[:, :, ::-1]
RGB-->>BGR
图片模糊处理
cat[::10, ::10, ::-1]

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 图片的翻转
n = np.random.randint(0, 100, size=(5, 6))
# 行翻转
print('n:\n', n, '\n')
print('n[::-1]:\n', n[::-1], '\n')  # 行翻转
# 列翻转
print('n[:, ::-1]:\n', n[:, ::-1], '\n')  # 列翻转

cat = plt.imread('cat.jpg')
print('cat.shape:\n', cat.shape, '\n')
# plt.imshow(cat)
# plt.show()

# plt.imshow(cat[::-1])  # 图片上下翻转
# plt.show()

# plt.imshow(cat[:, ::-1])  # 图片左右翻转
# plt.show()

# 对颜色翻转:RGB-->>BGR
# plt.imshow(cat[:, :, ::-1])  # 图片左右翻转
# plt.show()

# plt.imshow(cat[::10, ::10, ::-1])  # ::10 -->> 每隔10个取一个
# plt.show()  # 模糊处理

5.numpy的数组变形、合并、拆分

reshape:改变数组形状
np.reshape
np.reshape(n, (4, 5))
变成4行5列
n2.reshape(-1)
变成一行
n2.reshape(-1, 1)
变成一列

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

'''
    reshape:改变数组形状
'''
n = np.arange(1, 21)
n2 = np.reshape(n, (4, 5))
print('n:\n', n, '\n')  # [1,...,20]
print('n.shape:\n', n.shape, '\n')  # (20,)
print('n2:\n', n2, '\n')  # 变成4行5列的数组
print('n2.shape:\n', n2.shape, '\n')  # (4, 5)
n2 = n2.reshape(5, 4)
print('n2.shape:\n', n2.shape, '\n')  # (5, 4)
n2 = n2.reshape(-1)  # 变成一个维度
print('n2.shape:\n', n2.shape, '\n')  # (20,)
# 使用-1表示任意剩余维度长度
n2 = n2.reshape(4, -1)
print('n2.shape:\n', n2.shape, '\n')  # (4, 5)
n2 = n2.reshape(-1, 1)
print('n2:\n', n2, '\n')  # 变成多行一列
n2 = n2.reshape(2, -1, 2)
print('n2:\n', n2, '\n')  # 变成三维

合并
np.concatenate
np.concatenate((n1, n2), axis=0)
上下合并(默认)
np.concatenate((n1, n2), axis=1)
左右合并
np.hstack
np.hstack((n1, n2))
水平合并
np.vstack
np.vstack((n1, n2))
上下合并

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
'''
    np.concatenate()
        参数是列表或者元组
        级联的数组维度必须相同
        可通过axis参数改变级联的方向
'''

n1 = np.random.randint(0, 100, size=(3, 5))
n2 = np.random.randint(0, 100, size=(3, 5))
print(n1, '\n\n', n2, '\n')

np.concatenate((n1, n2))
print(np.concatenate((n1, n2)), '\n\n')  # 默认上下合并
np.concatenate((n1, n2), axis=0)  # 上下合并axis=0表示第一个维度(行)
np.concatenate((n1, n2), axis=1)  # 左右合并axis=1表示第一个维度(列)
print(np.concatenate((n1, n2), axis=1), '\n\n')  # 默认上下合并

'''
    np.hstack()与np.vstack
        水平级联(左右合并)与垂直级联(上下合并)
'''
np.hstack((n1, n2))
print(np.hstack((n1, n2)), '\n')  # 水平合并
np.vstack((n1, n2))
print(np.vstack((n1, n2)), '\n')  # 上下合并

拆分
np.vsplit
np.vsplit(n, 3)
垂直拆分
np.vsplit(n, (1, 2, 4))
拆分到第几行
按照指定位置拆分
np.hsplit
np.hsplit(n, 2)
水平拆分
np.split
np.split(n, 2, axis=0)
默认水平拆分
np.split(n, 2, axis=1)
按照列进行拆分

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
'''
    np.split(axis控制--->> 0行,1列)
    np.vsplit
    np.hsplit
'''
n = np.random.randint(0, 100, size=(6, 4))
print(n, '\n')
print(np.vsplit(n, 3), '\n')  # 垂直拆分,平均分成三份
print(np.vsplit(n, (1, 2, 4)), '\n')  # 拆分到第几行,按照指定位置拆分
print(np.hsplit(n, 2), '\n')  # 水平拆分,平均分成两份
print(np.split(n, 2, axis=0), '\n')  # 默认水平拆分
print(np.split(n, 2, axis=1), '\n')  # 按照列进行拆分

cat = plt.imread('cat.jpg')
cat2 = cat[:-1]  # 到最后一个行(420),但是不包含
# plt.imshow(cat2)
# plt.show()
cat3 = np.split(cat2, 2)
# plt.imshow(cat3[0])  # 上半部分
# plt.show()
# plt.imshow(cat3[1])  # 下半部分
# plt.show()

cat4 = np.split(cat2, 5, axis=1)
plt.imshow(cat4[0])  # 水平拆分
plt.show()

6.numpy的赋值和深拷贝

赋值(=)同一个内存,该任何一个,俩个都改变
深拷贝(.copy())不是同一个内存,后改变的数值,不影响前边的数值

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# '''
#     1. 赋值:用的是同一个内存
# '''
# n = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
# print(n)
# n2 = n
# n2[0] = 100
# print('\n', n, '\n', n2)   # n2 = n =  [100   1   2   3   4   5   6   7   8   9]
#
# '''
#     2. 拷贝:.copy()-->>深拷贝
# '''
# n1 = np.arange(10)
# n3 = n1.copy()
# n3[0] = 100
# print('\n', n1, '\n', n3)
# # n3 =  [100   1   2   3   4   5   6   7   8   9]
# # n1 =  [0 1 2 3 4 5 6 7 8 9]

n = np.random.randint(0, 10, size=(2, 3))
n2 = n.copy()
n2[0, 0] = 100
print(n2)

7.numpy的聚合

1np.sum(n,axis=None)求和
2np.nansum

nan:空值

ps:排除空值求和

3np.min最小值
4np.max最大值
5np.mean(用的多)平均值
6np.average平均值
7np.median中位数
8np.percentile百分位数
9np.argmin第一个最小值对应的下标
10np.argmax第一个最大值对应的下标
11np.std标准差
12np.var方差
13np.power次方,求幂
14np.argwhere按条件查找
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

n = np.arange(10)
n1 = np.random.randint(0, 10, size=(3, 5))
print('np.sum(n):\n', np.sum(n), '\n')  # 45
print('np.sum(n1):\n', np.sum(n1), '\n')  # 82
print('np.sum(n1):\n', np.sum(n1, axis=1), '\n')  # axis=0:每一列的多行求和

print('np.max(n1):\n', np.max(n1), '\n')
print('np.min(n1):\n', np.min(n1), '\n')
print('np.mean(n1):\n', np.mean(n1), '\n')
print('np.average(n1):\n', np.average(n1), '\n')
print('np.median(n1):\n', np.median(n1), '\n')
print('np.percentile(n1):\n', np.percentile(n1, q=50), '\n')  # 百分位数,表示中位数

n1 = n1.reshape(-1)
print(n1)
print('np.argmax(n1):\n', np.argmax(n1), '\n')  # 第一个最大值对应的下标
print('np.argwhere(n1):\n', np.argwhere(n1 == np.max(n1)), '\n')  # 按照条件找到所有最大值的下标
print('np.power(n1):\n', np.power(n1, 2), '\n')  # 等于n ** 2
print('np.std(n1):\n', np.std(n1), '\n')
print('np.var(n1):\n', np.var(n1), '\n')

n2 = np.array([1, 2, 3, np.nan])
print('n2:', n2)
print('np.sum(n2):\n', np.sum(n2), '\n')  # nan
print('np.nansum(n2):\n', np.nansum(n2), '\n')  # 6.0 

7.numpy的矩阵操作(矩阵,广播,其他)

矩阵操作
一、矩阵基本操作

加减乘除

整除

次方

求余数

(这里是每个数字)

加法(n + 10)

减法(n - 10)
乘法(n + 10)
除法(n  /  10)
整除(n  // 10)
次方(n  ** 10)
求余数(n  % 10)

矩阵对应元素

加减乘除等

n + n1
n - n1
矩阵乘法(线性代数)  np.dot()
矩阵的逆
np.linalg.inv(n1)
矩阵的行列式的值
np.linalg.det(n1)
矩阵的秩
np.linalg.matrix_rank(n1)
二、广播机制
1.为缺失的维度补充维度2.缺失元素用以有值填充
三、其他数学操作
绝对值
np.abs(n)
平方
np.square(n)
指数e
 np.exp(n)
自然对数,以e为底
np.log(n)
以2为底
np.log2(n)
 以10为底
np.log10(n)
正弦
np.sin(n)
余弦
 np.cos(n)
正切
np.tan(n)
四舍五入
np.round(n, 2)
向上取整
np.ceil(n)
向下取整
np.floor(n)
累加 
每一位的数值都是从最前边到它本身的求和
np.cumsum(n)
# import numpy as np
# import pandas as pd
# import matplotlib.pyplot as plt
#
# n = np.arange(10)
# n1 = np.random.randint(0, 10, size=(3, 5))
# print('np.sum(n):\n', np.sum(n), '\n')  # 45
# print('np.sum(n1):\n', np.sum(n1), '\n')  # 82
# print('np.sum(n1):\n', np.sum(n1, axis=1), '\n')  # axis=0:每一列的多行求和
#
# print('np.max(n1):\n', np.max(n1), '\n')
# print('np.min(n1):\n', np.min(n1), '\n')
# print('np.mean(n1):\n', np.mean(n1), '\n')
# print('np.average(n1):\n', np.average(n1), '\n')
# print('np.median(n1):\n', np.median(n1), '\n')
# print('np.percentile(n1):\n', np.percentile(n1, q=50), '\n')  # 百分位数,表示中位数
#
# n1 = n1.reshape(-1)
# print(n1)
# print('np.argmax(n1):\n', np.argmax(n1), '\n')  # 第一个最大值对应的下标
# print('np.argwhere(n1):\n', np.argwhere(n1 == np.max(n1)), '\n')  # 按照条件找到所有最大值的下标
# print('np.power(n1):\n', np.power(n1, 2), '\n')  # 等于n ** 2
# print('np.std(n1):\n', np.std(n1), '\n')
# print('np.var(n1):\n', np.var(n1), '\n')
#
# n2 = np.array([1, 2, 3, np.nan])
# print('n2:', n2)
# print('np.sum(n2):\n', np.sum(n2), '\n')  # nan
# print('np.nansum(n2):\n', np.nansum(n2), '\n')  # 6.0

# import numpy as np
# import pandas as pd
# import matplotlib.pyplot as plt
#
# # n = np.random.randint(0, 10, size=(4, 5))
# # print('n:\n', n, '\n')
# # print('n:\n', n + 10, '\n')  # 加法
# # print('n:\n', n - 10, '\n')  # 减法
# # print('n:\n', n * 10, '\n')  # 乘法
# # print('n:\n', n / 10, '\n')  # 除法
# # print('n:\n', n // 2, '\n')  # 整除法
# # print('n:\n', n ** 2, '\n')  # 次方
# # print('n:\n', n % 2, '\n')  # 余数
# #
# # n1 = np.random.randint(0, 10, size=(4, 5))
# # print('n + n1:\n', n + n1, '\n')
# # print('n - n1:\n', n - n1, '\n')
# # print('n * n1:\n', n * n1, '\n')
# # print('n * n1:\n', n / n1, '\n')
#
# n1 = np.random.randint(0, 10, size=(4, 4))
# n2 = np.random.randint(0, 10, size=(4, 4))
# print('np.dot(n1, n2):\n', np.dot(n1, n2), '\n')
# print('np.linalg.inv(n1):\n', np.linalg.inv(n1), '\n')  # 矩阵的逆
# print('np.linalg.det(n1):\n', np.linalg.det(n1), '\n')  # 矩阵的行列式的值
# print('np.linalg.matrix_rank:\n', np.linalg.matrix_rank(n1), '\n')  # 矩阵的秩:4-->>满秩

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# m = np.ones((2, 3), dtype=np.int8)
# n = np.arange(3)  # [0,1,2]
#
# print('m + n:\n', m + n, '\n')  # 这里用已有数值帮助a矩阵补充了一个维度
#
# a = np.arange(3).reshape((3, 1))
# b = np.arange(3)
# print('a + b:\n', a + b, '\n')   # 变成了3行3列
#
#
# c = np.ones((4, 1), dtype=np.int8)
# d = np.arange(4)
# print('c + d:\n', c + d, '\n')   # 变成了4行4列

n = np.array([1, 4, 8, 9, 16, 25, 64])
print('np.abs(n):\n', np.abs(n), '\n')   # 绝对值
print('np.square(n):\n', np.square(n), '\n')   # 平方
print('np.exp(n):\n', np.exp(n), '\n')   # 指数e
print('np.log(n):\n', np.log(n), '\n')   # 自然对数,以e为底
print('np.log2(n):\n', np.log2(n), '\n')   # 以2为底
print('np.log10(n):\n', np.log10(n), '\n')   # 以10为底
print('np.sin(n):\n', np.sin(n), '\n')   # 正弦
print('np.cos(n):\n', np.cos(n), '\n')   # 余弦
print('np.tan(n):\n', np.tan(n), '\n')   # 正切
print('np.round(n, 2):\n', np.round(n, 2), '\n')   # 四舍五入
print('np.ceil(n):\n', np.ceil(n), '\n')   # 向上取整
print('np.floor(n):\n', np.floor(n), '\n')   # 向下取整
print('np.cumsum(n):\n', np.cumsum(n), '\n')   # 累加 ,每一位的数值都是从最前边到它本身的求和

8.numpy的数组快速排序

排序
np.sort(n)不改变原来的数组
n.sort()改变原来的数组。不多占内存空间

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

n1 = np.random.randint(0, 10, size=6)
n2 = np.sort(n1)
print('np.sort(n1):\n', n2, '\n')  # 不改变输入
n3 = np.random.randint(0, 10, size=6)
n3.sort()
print('n3:\n', n3, '\n')

9.numpy的文件操作

np.save
保存ndarray到一个npy文件
np.savez
将多个ndarray保存到一个npy文件
np.load('x.npy')
读取文件
np.load('arr.npz')['xarr']
读取文件
np.savetxt('arr.csv', n, delimiter=',')
 csv文件的保存
np.loadtxt('arr.csv', delimiter=',')
csv文件的读取

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

x = np.arange(5)
y = np.arange(10, 20)
np.save('x', x)  # 保存文件
print(np.load('x.npy'))  # 读取文件

np.savez('arr.npz', xarr=x, yarr=y)  # 保存文件
print(np.load('arr.npz')['xarr'])  # 读取文件

# csv,txt文件的读写功能
n = np.random.randint(0, 10, size=(3, 4))
# 存储到csv或者txt
np.savetxt('arr.csv', n, delimiter=',')  # 加上分隔符,不用默认的
print(np.loadtxt('arr.csv', delimiter=','))  # 读取文件

10.numpy的练习

10.1 创建一个长度为10的一维全部为0 的ndarray对象,然后让第5个元素等于1

import numpy as np
n = np.zeros(10, dtype=np.int8)
n[4] = 1
print(n)  # [0 0 0 0 1 0 0 0 0 0]

10.2 创建一个元素为10到49的ndarray对象

import numpy as np
n = np.arange(10, 50)

10.3 将第2题的所有元素位置反转

import numpy as np
n = np.arange(10, 50)
n = n[::-1]

10.4 使用np.random.random创建一个10*10的ndarray对象,并且打印出最大最小元素

import numpy as np
n = np.random.random(size=(10, 10))
print(np.max(n), np.min(n))  # 0.9826860473514594 0.002145136701101058

10.5 创建一个10*10的ndarray对象,且矩阵边界都是1,里边全是0

import numpy as np
# 方法一
# n = np.zeros((10, 10), dtype=np.int8)
# n[[0, -1]] = 1
# n[:, [0, -1]] = 1
# 方法二
n = np.ones((10, 10), dtype=np.int8)
n[1: -1, 1: -1] = 0
print(n)

10.6 创建一个每一行都是从0到4的5*5矩阵

import numpy as np
l = [0, 1, 2, 3, 4]
n = np.array(l*5).reshape((5, 5))
print(n)

10.7 创建一个范围在(0,1)之间的长度为12的等差数列

import numpy as np
n = np.linspace(0, 1, 12)

10.8 创建一个长度为10的随机数组并且排序

import numpy as np
n = np.random.randint(0, 10, 10)
n.sort()  # 升序
n[::-1]   # 翻转降序

10.9 创建一个长度为10 的随机数组并且将最大值替换成0

import numpy as np
n = np.random.randint(0, 10, size=10)
max1 = np.max(n)
max_index = np.argwhere(n == max1).reshape(-1)  # 所有最大值的索引
n[max_index] = 0

10.10 给定一个4维矩阵,如何得到最后两维的和?

import numpy as np
n = np.random.randint(0, 10, size=(2, 3, 4, 5))  # 四维
n1 = n.sum(axis=(2, 3))

10.11 给定数组[1,2,3,4,5],如何得到这个数组的每个元素之间插入3个0后的新数组?

import numpy as np
n = np.arange(1, 6)
n2 = np.zeros(17, dtype=np.int8)
n2[::4] = n    # 每隔4个数放一个n

10.12 给定一个二维矩阵,如何交换其中两行的元素

import numpy as np
n = np.random.randint(0, 10, size=(4, 4))
# 利用索引交换行
n2 = n[[1, 0, 2, 3]]

10.13 创建一个100000长度的随机数组,使用两种方法对其求三次方,并且比较使用的时间

*pycharm 里边报错

10.14 创建一个5*3 的随机矩阵和一个3*2的随机矩阵,求矩阵的积

import numpy as np
n1 = np.random.randint(0, 100, size=(5, 3))
n2 = np.random.randint(0, 100, size=(3, 2))
print(np.dot(n1, n2))

10.15 矩阵的每一行的元素都减去该行的平均值

import numpy as np
n = np.random.randint(0, 10, size=(3, 4))
n2 = n.mean(axis=1).reshape(3, 1)
print(n - n2)

10.16 打印出一下矩阵(要求使用np.zeros创建8*8的矩阵)

import numpy as np
n = np.zeros((8, 8), dtype=np.int8)
n[::2, 1::2] = 1
n[1::2, 0::2] = 1

10.17 正则化一个5*5的随机矩阵

正则的概念:假设a是矩阵中的一个元素,max/min分别是矩阵的元素的最大值与最小值,则正则化后a = (a - min) /(max - min)

import numpy as np
n = np.random.randint(0, 100, size=(5, 5))
min1 = n.min()
max1 = n.max()
print(min1, max1)
print((n - min1)/(max1 - min1))

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值