1.numpy总结(1)


前言

学习了很久的pytorch,这里对pytorch及其相关知识做个总结。首先从基本的numpy库入手。

一、numpy

NumPy(Numerical Python)是Python语言的一个开源数值计算扩展库,提供了丰富的数学函数和操作工具,用于处理大型多维数组和矩阵,这些数据结构是在现代数据科学和工程应用中广泛使用的基础。

conda install numpy
pip install numpy

二、numpy数组与列表的区别

1.Python中的列表可以动态地改变,而NumPy数组是不可以的,它在创建时就有固定大小了。改变Numpy数组长度的话,会新创建一个新的数组并且删除原数组。

2.NumPy数组中的数据类型必须是一样的,而列表中的元素可以是多样的。

3.NumPy针对NumPy数组一系列的运算进行了优化,使得其速度特别快,并且相对于Python中的列表,同等操作只需使用更少的内存。

1.创建numpy数组

代码如下(示例):

import numpy as np

# 创建一个一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print("一维数组:")
print(arr1)

# 创建一个二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("\n二维数组:")
print(arr2)

# 创建一个三维数组
arr3 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]])
print("\n三维数组:")
print(arr3)

除了 np.array() 函数外,NumPy 还提供了一些其他函数来创建特定类型的数组,比如:

np.zeros():创建全零数组。
np.ones():创建全一数组。
np.full():创建指定值的填充数组。
np.arange():类似于Python的 range() 函数,创建一个按指定步长递增的数组。
np.linspace():创建指定数量的等间隔数组。
np.random.rand():创建指定形状的随机数组。

2.numpy数组的属性

NumPy 数组具有多种属性,这些属性提供了有关数组的各种信息,例如形状、大小、数据类型等。下面是一些常用的 NumPy 数组属性:
1.
NumPy 数组具有多种属性,这些属性提供了有关数组的各种信息,例如形状、大小、数据类型等。下面是一些常用的 NumPy 数组属性:
1.ndarray.shape:返回一个元组,表示数组的维度。对于一维数组,返回一个包含单个元素的元组;对于二维数组,返回一个包含两个元素的元组,依此类推。
2.ndarray.ndim:返回数组的维度数量,也就是数组的轴数。
3.ndarray.size:返回数组中元素的总数。
4.ndarray.dtype:返回数组中元素的数据类型。
5.ndarray.itemsize:返回数组中每个元素的字节大小。

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)  # 输出:(2, 3),表示这是一个2行3列的数组
print(arr.ndim)  # 输出:2,表示这是一个二维数组
print(arr.size)  # 输出:6,表示数组中共有6个元素
print(arr.dtype)  # 输出:int64,表示数组中元素的数据类型是64位整数
print(arr.itemsize)  # 输出:8,表示数组中每个元素占8个字节

下面重点介绍numpy的shape变换
shape 表示数组的维度或形状, 是一个整数的元组,元组的长度等于 ndim。

shape 这个属性在实际中用途还是非常广的。
可以使用 arr.reshape() 函数,在不改变数组元素内容的情况下变换数组的形状。但是你需要注意的是,变换前与变换后数组的元素个数需要是一样的,请看下面的代码

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6])
print("原始数组:", arr)

# 使用 reshape() 将一维数组转换为二维数组
reshaped_arr = arr.reshape(2, 3)
print("重塑后的数组:")
print(reshaped_arr)

需要注意的是,reshape() 函数所需的新形状的元素数量必须与原始数组的元素数量相同,否则会抛出错误。例如,尝试将一个包含6个元素的一维数组重新塑造为一个包含3行3列的二维数组将导致错误。

arr = np.array([1, 2, 3, 4, 5, 6])
# 错误的重新塑造,因为元素数量不匹配
reshaped_arr = arr.reshape(3, 3)  # 会引发错误

除了指定完整的新形状之外,你还可以使用 -1 作为其中一个维度的值,以自动计算该维度的大小,例如:

arr = np.array([1, 2, 3, 4, 5, 6])
reshaped_arr = arr.reshape(2, -1)  # 自动计算第二个维度的大小
print(reshaped_arr)

3 np.arange()和np.linspace()

np.arange() 函数是 NumPy 中用于创建等间隔的一维数组的方法。它类似于 Python 内置的 range() 函数,但返回的是一个 NumPy 数组而不是 Python 的列表。

np.arange() 函数的基本语法如下:

numpy.arange([start, ]stop, [step, ], dtype=None)
start:可选参数,表示序列的起始值,默认为0。
stop:必需参数,表示序列的结束值(不包含)。
step:可选参数,表示序列的步长,默认为1。
dtype:可选参数,表示返回数组的数据类型。

import numpy as np

# 生成从0到4的一维数组
arr1 = np.arange(5)
print(arr1)  # 输出:[0 1 2 3 4]

# 生成从3到10的一维数组,步长为2
arr2 = np.arange(3, 11, 2)
print(arr2)  # 输出:[3 5 7 9]

# 生成从1到5的一维数组,步长为0.5
arr3 = np.arange(1, 6, 0.5)
print(arr3)  # 输出:[1.  1.5 2.  2.5 3.  3.5 4.  4.5 5. ]

需要注意的是,与 Python 内置的 range() 函数不同,np.arange() 返回的是一个包含浮点数的数组,因为它能够处理浮点步长。如果你需要整数数组,你可以将 dtype 参数设置为 int,例如 dtype=int。

np.linspace() 函数是 NumPy 中用于创建等间隔的一维数组的方法,与 np.arange() 不同,np.linspace() 返回的数组包含指定范围内的固定数量的元素,而不是指定步长。
np.linspace() 函数的基本语法如下:

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start:序列的起始值。
stop:序列的结束值(包含在序列中)。
num:可选参数,表示在指定范围内生成的等间隔样本的数量,默认为50。
endpoint:可选参数,表示是否包含 stop 值,默认为True,即包含 stop 值。
retstep:可选参数,表示是否返回步长,默认为False。
dtype:可选参数,表示返回数组的数据类型。
import numpy as np

# 生成从0到10之间的5个等间隔的数
arr1 = np.linspace(0, 10, 5)
print(arr1)  # 输出:[ 0.   2.5  5.   7.5 10. ]

# 生成从1到2之间的10个等间隔的数
arr2 = np.linspace(1, 2, 10)
print(arr2)  # 输出:[1.         1.11111111 1.22222222 1.33333333 1.44444444 1.55555556 1.66666667 1.77777778 1.88888889 2.        ]

# 生成从0到π之间的20个等间隔的数,并返回步长
arr3, step = np.linspace(0, np.pi, 20, retstep=True)
print("数组:", arr3)
print("步长:", step)

np.linspace() 可以非常方便地生成一些特定范围内的等间隔数据,这在许多科学计算和工程应用中非常有用。

4数组的轴

这是一个非常重要的概念,也是 NumPy 数组中最不好理解的一个概念。它经常出现在 np.sum()、np.max() 这样关键的聚合函数中。
在这里插入图片描述

 np.sum(interest_score, axis=0)
 array([16, 13, 18])

在这里插入图片描述

 np.sum(interest_score, axis=1)
 array([16, 11, 13,  7]

在这里插入图片描述

总结

Numpy 的很多知识点是与 PyTorch 融会贯通的,例如 PyTorch 中的 Tensor。而且 Numpy 在机器学习中常常被用到,很多模块都要基于 NumPy 展开。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值