Numpy学习笔记

一. 创建数组

1. 使用 np.array() 由 python list 创建

注意

  • numpy 默认使用 ndarray 的所有元素的类型是相同的

  • 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str -> float -> int

  • ndarray 的数据类型:

    int: int8、uint8、int16、int32、int64
    float: float16、float32、float64
    str: 字符串
    
import numpy as np

list1 = [1, 2, 3, 4, 5, 6]
n = np.array(list1)
print(n, type(n))  # [1 2 3 4 5 6] <class 'numpy.ndarray'>

# 元素类型优先级
n = np.array([3.14, 2, 1, 'fg'])
print(n)  # ['3.14' '2' '1' 'fg']

# 数组的维度数包含在属性中。ndim
# 数组的形状是非负整数的元组,用于指定沿每个维度的元素数。shape
# 数组中固定的元素总数包含在属性中。size

2. 使用 np 的常规函数创建

  • 创建一个所有元素都是1的多维数组
    np.ones(shape, dtype=None, order='C')

    shape:形状
    dtype=None:元素类型
    order: {'C', 'F'}:可选,默认值:C 是否在内存中以行主或列主 顺序存储多维数据,一般默认即可
    
import numpy as np

n = np.ones(5)
print(n)

# 创建2行3列都是1的数组
n = np.ones((2, 3), dtype=int)
print(n)

n = np.zeros((3, 3), dtype=float)
print(n)

在这里插入图片描述

  • 创建一个所有元素都为指定元素的多维数组
    np.full(shape, fill_value, dtype=None, order='C')

    shape:形状
    fill_value:填充值
    dtype=None:元素类型
    
import numpy as np

n = np.full((2, 3, 4), 1)
print(n)

在这里插入图片描述

  • 创建对角线为1,其他位置为0的二维数组
    np.eye(N, M=None, k=0, dtype=float)
    N:行数
    M:列数,默认为None,表示与行数一样
    dtype=None:元素类型
    
import numpy as np

n = np.eye(3, 3, dtype=int)
print(n)

# 向右偏移1个位置
n = np.eye(3, 3, k=1, dtype=int)
print(n)
# 向左偏移1个位置
n = np.eye(3, 3, k=-1, dtype=int)
print(n)

在这里插入图片描述

  • 创建一个等差数列
    np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

     start:开始值
     stop:结束值
     num=50:等差数列中默认有50个数
     endpoint=True:是否包含结束值,默认包含
     retstep=False:是否返回等差值(步长)
     dtype=None:元素类型
    
import numpy as np

n = np.linspace(0, 100, num=51, retstep=True, dtype=int)
print(n)

在这里插入图片描述

  • 创建一个数值范围的数组
    np.arange([start,]stop, [step,], dtype=None)

    start :开始值(可选)
    stop:
    结束值(不包含)
    step:步⻓(可选)
    dtype=None:元素类型
    
import numpy as np

n = np.arange(1, 10, 2)
print(n)  # 输出:[1 3 5 7 9]
  • 创建一个随机整数的多维数组
    np.random.randint(low, high=None, size=None, dtype=None)'

    low:最小值
    high:(1)high=None时,生成的数值在[0, low)区间内
    	  (2)使用high值时,生成的数值在[low, high)区间
    size=None:数组形状,默认只输出一个随机值
    
import numpy as np
import matplotlib.pyplot as plt

n = np.random.randint(3)
print(n)  # 输出一个0到2之间的随机整数

n = np.random.randint(0, 10, 5)
print(n)  # 输出一个包含5个0到9之间随机整数的数组

n = np.random.randint(0, 10, (2, 3))
print(n)  # 输出一个2行3列的矩阵,矩阵中的元素是0到9之间的随机整数

n = np.random.randint(0, 10, (2, 3, 4))
print(n)  # 输出一个3维数组,每个元素是0到9之间的随机整数

# 20表示图像的高度(行数),40表示图像的宽度(列数),3表示每个像素的通道数。
n = np.random.randint(0, 256, (20, 40, 3))
plt.imshow(n)
plt.show()  # 显示一个20行40列的彩色图像,每个像素的RGB值是0到255之间的随机整数。

在这里插入图片描述

  • 创建一个服从标准正态分布的多维数组
    np.random.randn(d0, d1, ..., dn)

    import numpy as np
    n = np.random.randn(3, 4)
    print(n)  # 输出为服从标准正态分布的3行4列的二维数组
    
  • 创建一个服从正态分布的多维数组
    np.random.normal(loc=0.0, scale=1.0, size=None)

    loc=0.0:均值,对应着正态分布的中心
    scale:标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,反之越高瘦
    size=None:数组形状
    
import numpy as np
n = np.random.normal(170, 5, (3, 4))
print(n)  # 输出为服从均值为170,标准差为5的3行4列的二维数组
  • 创建一个元素为0~1(左闭右开)的随机整数的多维数组
import numpy as np

n = np.random.random(size=(3, 4))
print(n)  # 随机生成一个3行4列的数组

n = np.random.rand(3, 4)
print(n)  # 随机生成一个3行4列的数组

二. ndarray的属性

import numpy as np

n = np.array([[[1, 2], [3, 4], [5, 6]]])
print(n)
# ndim 维度
print(n.ndim)  # 3
# shape 形状(各维度的长度)
print(n.shape)  # (1, 3, 2)
# size 数量(各维度长度的乘积)
print(n.size)  # 6
# dtype 数据类型
print(n.dtype)  # int64

三. ndarray的基本操作

1. 索引

import numpy as np

n = np.array([1, 2, 3, 4, 5])
print(n[2])  # 3

n = np.array([[1, 2, 3], [4, 5, 6]])
print(n[1, 2])  # 6
print(n[1][2])  # 6

n = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(n[0, 0, 2])  # 3
print(n[0][0][2])  # 3

# 根据索引修改数据
n[0, 0, 2] = 0
n[0, 0] = [0, 0, 0]
# 修改多行
n[[[0, 1]]] = 2
print(n)

# 切片 [起始索引:结束索引+1:步长](默认值:0,-1,1)
n = np.arange(5)
print(n)  # [0 1 2 3 4]
print(n[1:3])  # [1 2]
print(n[::2])  # [0 2 4]
print(n[::-1])  # [4 3 2 1 0]
print(n[-1:-5:-1])  # [4 3 2 1]

n = np.array([[1, 2, 3], [4, 5, 6]])
print(n[::-1])  # 行翻转
print(n[:, ::-1])  # 列翻转
import matplotlib.pyplot as plt

mm = plt.imread('4.jpg')
plt.imshow(mm)
# plt.show()

# 上下翻转
plt.imshow(mm[::-1])

# 左右翻转
plt.imshow(mm[::, ::-1])

# 第三个维度翻转,颜色翻转,模糊处理
plt.imshow(mm[::20, ::20, ::-1])
plt.show()

在这里插入图片描述

2. 变形

使用 reshape函数,注意参数是一个 tuple

import numpy as np

n = np.arange(1, 5)
print(n)  # [1 2 3 4]
print(n.shape)  # (4,)

# 变成2维
n2 = np.reshape(n, (2, 2))
print(n2.shape)  # (2, 2)
print(n2)

# 变成1维
print(n2.reshape(-1))  # [1 2 3 4]

3. 级联

import numpy as np

n1 = np.array([[1, 2], [3, 4]])
n2 = np.array([[5, 6], [7, 8]])

# 上下合并:垂直级联
print(np.concatenate((n1, n2), axis=0))
# 左右合并:水平级联
print(np.concatenate((n1, n2), axis=1))
# 拼接:垂直级联
print(np.vstack((n1, n2)))
# 拼接:水平级联
print(np.hstack((n1, n2)))

在这里插入图片描述

4. 拆分

import numpy as np

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

# 垂直方向,
print(np.vsplit(n, 2))
print(np.split(n, 2, axis=0))
# 水平方向
print(np.hsplit(n, 2))
print(np.split(n, 2, axis=1))

在这里插入图片描述

5. 拷贝、复制、副本

import numpy as np

# 赋值操作不行
n1 = np.arange(5)
n2 = n1
n1[0] = 100
print(n1, n2)

# copy
n1 = np.arange(5)
n2 = n1.copy()
n1[0] = 100
print(n1, n2)

在这里插入图片描述

6. 转置

n = np.array([[1, 2], [3, 4], [5, 6]])
print(n.T)

在这里插入图片描述

四. ndarray的聚合操作

import numpy as np
import matplotlib.pyplot as plt

n = np.array([1, 2, 3, 4, 5])
print(np.sum(n))  # 15

n = np.array([[1, 2], [3, 4], [5, 6]])
print(np.sum(n))  # 21
print(np.sum(n, axis=0))  # 行 [9 12]
print(np.sum(n, axis=1))  # 列 [ 3  7 11]

# 最大、小值
print(np.max(n))  # 6
print(np.min(n))  # 1

# 最小数下标、最大数下标
print(np.argmin(n))  # 0
print(np.argmax(n))  # 5

# 平均值
print(np.mean(n))  # 3.5
print(np.average(n))  # 3.5

# 中位数
print(np.median(n))  # 3.5

# 标准差
print(np.std(n))  # 1.707825127659933
# 方差
print(np.var(n))  # 2.9166666666666665
# 次方
print(np.power(n, 2))  # [[ 1  4]\n [ 9 16]\n [25 36]]

# 按条件查找:返回满足条件的索引
print(np.argwhere(n > 3))  # [[1 1]\n [2 0]\n [2 1]]

广播机制:

转载别人的笔记

五. ndarray的矩阵操作

import numpy as np

n1 = np.array([[1, 2, 3,], [2, 3, 4]])
n2 = np.array([[1, 2, 3], [3, 3, 4]])
print(n1 - 1)
print(n1 + n2)

n1 = np.array([[1, 2, 3,], [2, 3, 4]])
n2 = np.array([[1, 2], [3, 1], [3, 3]])
# 矩阵乘积
print(n1 @ n2)
print(np.dot(n1, n2))

n = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
# 逆矩阵
print(np.linalg.inv(n))
# 求行列式
print(np.linalg.det(n))  # 1
# 求秩
print(np.linalg.matrix_rank(n))  # 3

六. ndarray的排序

import numpy ad np

n1 = np.array([1, 2, 8, 6, 5])
print(np.sort(n1))  # [1 2 5 6 8]
n1.sort()
print(n1)  # [1 2 5 6 8]

七. ndarray文件操作

import numpy as np

x = np.arange(0, 5)
y = np.arange(5, 10)

# save:保存ndarray到一个npy文件
np.save('x.npy', x)

# savez:保存多个ndarray到一个npz文件
np.savez('xy.npz', xarr=x, yarr=y)

# 读取文件
print(np.load('x.npy'))  # [0 1 2 3 4]
print(np.load('xy.npz')['yarr'])  # [5 6 7 8 9]

# csv、txt文件的读写操作
n = np.array([[1, 2, 3], [4, 5, 6]])

# 存储数组到txt或csv,用delimiter为分隔符
np.savetxt('n.txt', n, delimiter=',')
np.savetxt('n.csv', n, delimiter=',')
# 读取txt或csv文件
print(np.loadtxt('n.txt', delimiter=','))  # [[1. 2. 3.], [4. 5. 6.]]
print(np.loadtxt('n.csv', delimiter=','))  # [[1. 2. 3.], [4. 5. 6.]]
  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FG.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值