Python--Numpy基础

本文介绍了Python中的Numpy库,它是处理矩阵运算的重要工具,尤其在数据科学和机器学习领域。文章详细讲解了如何创建数组,包括函数创建、其他常用函数,如基于范围特征创建,以及如何添加矩阵的行或列。此外,还阐述了如何访问数组,如切片、遍历和整数序列访问,并介绍了线性代数运算,如矩阵转置、迹、乘法、加减、随机矩阵、矩阵的逆和计算行列式,以及向量的各种操作。
摘要由CSDN通过智能技术生成

Numpy是Python的一个能快速处理矩阵运算的数学库,如果你从事的是数据科学,或者机器学习领域的话,Numpy是一项最基本的技能。他不仅简化了我们在处理矩阵运算时需要编写的代码,而且,许多Numpy的底层函数用C编写,我们能获得在用普通Python自带的列表结构时,所无法达到的运算速度。

下面,我将就Numpy的一些基本用法,做个简单的介绍,当然,一来Numpy库本身会不断更新,二来,我本人的认知也会随时间改变,所以,这部分内容也会随时更新。当然一些我认为不太常用的方法、结构,不会出现在本文中,使得本文尽量简洁明了。

因为Numpy并不是Python本身自带的库,所以,使用之前,当然需要先安装,具体的方法,百度一下会有很多,我在此就略了。所以,我默认所有对这部分内容感兴趣的人都已经安装好了Numpy,并且有一定的Python语言基础。需要注意的是,为了使得文中的代码尽量简洁,所有出现的代码都默认已经引入了Numpy库,并简写为np。也就是说,所有代码都默认在它们之前导入了numpy库:import numpy as np

创建数组

1. np.array() 函数创建数组

Numpy为我们提供的创建数组的方法可以说非常丰富,针对某些特殊类型的数组还有专门的函数,但是基本上讲,有以下三种:

(1) Numpy中的数组类型——ndarray

a = np.array([1, 2, 3]) # >>> [1 2 3]
b = np.array((1, 2, 3.5)) # >>> [1. 2. 3.5]
print(type(a), type(b)) # >>> <class 'numpy.ndarray'> <class 'numpy.ndarray'>

我们将一个序列传递给np.array() 函数(其实,这个序列不一定是列表,元组,甚至字符串都可以),会生成一个新的 ndarray 型的对象,这就是Numpy中的数组了,从形式上中也可以看出,这种对象不同于列表,中间是没有 “,” 分隔的。

我们发现,当传入的序列中的元素是不同类型时,生成ndarray对象后,元素的类型会受到影响,比如,上面的例子中,当整型和浮点型都存在时,生成的对象中原本是整型的元素也变成了一种特殊的浮点型(这种类型时ndarray对象所特有的),考虑到一般只是进行数学意义上的运算,所以尽量避免在传入的序列中加入字符串这种操作,以免类型错乱,造成不必要的麻烦。

当然,np.array()函数也适用于生成多维数组。

m = np.array([[1, 2], [3, 4]]) # >>> [[1 2]
                                      [3 4]]

需要注意的是,想要用序列生成数组,传入函数的一定是一个完整的序列,而不能只是元素的排布

a = np.array(1, 2, 3) # >>> 错误!
a = np.array([1, 2, 3]) # >>> 正确!

其实,在实际应用中,一般我们就把Numpy中的多维数组当做矩阵,来执行相关运算。所以,正确地创立数组,是开始所有代数运算的先决条件。

(2) ndarray型对象的属性

此外,和其他数据类型一样,我们可以查看”ndarray”型对象的相关属性:

  • ndarray.dtype:数据类型
a = np.array([1.5, 2, 3], dtype=int) #设置数组中元素的数据类型为整型
print(a) # >>> [1 2 3]

b = np.array([[1, 2.3], [4.1, 5.0]])
print(b.dtype) # >>> float64,访问数组b的数据类型
  • ndarray.shape:数组大小
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])
print(a.shape) # >>> (3,)
print(b.shape) # >>> (3, 1) # shape实际上是一个元组

也可以通过设置shape来改变数组的形状:

a = np.array([1, 2, 3, 4], [4, 2, 3, 1], [3, 4, 2, 1]) # 现在,a是3 x 4的矩阵
a.shape = 4, 3 # a的形状被改变
print(a) # >>> [[1 2 3]
                [4 4 2]
                [3 1 3]
                [4 2 1]]
  • ndarray.ndim:数组的维度
a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]], [[9, 10], [11, 12]]])
b = np.array([[1], [2], [3]])
print(a.ndim) # >>> 3
print(b.ndim) # >>> 2
  • ndarray.size:数组中元素的总个数
a = np.array([1, 2, 3])
b = np.array([[1], [2], [3]])
print(a.size) # >>> 3
print(b.size) # >>> 3

当然,ndarray对象还有很多其他属性,这些属性有助于我们更好地控制数组对象,基本使用方法与上面类似,不再赘述。

2. 创建数组过程中常用的其他函数

需要注意的一点是:上面的例子都是先创建一个Python序列,然后通过array()函数将其转换为数组,这样做显然效率不高。因此NumPy提供了很多专门用来创建数组的函数。以方便用户在已知数组是具备的某种特殊性质下,快速创建数组。

(1)np.arange()依据范围特征创建数组

之前,我们知道Python基本语法里的 range() 函数可以根据数值范围生成列表,同样的,我们在Numpy中通过 arange() 函数,按照一定规律生成数组。

a = np.arange(5) # >>> [0 1 2 3 4]
b = np.arange(1, 7, 2) # >>> [1 3 5]

语法上讲,和 range() 函数是一致的,都是由三个参数 `(start, stop, step)组成

(2)np.linspace()

作用与arange()类似,三个必要的参数:”start, stop, num”,不过默认状态下包含终值。

a = np.arange(1, 7, 3) # >>> [1.  4.  7.]
(3)np.logspace()

函数和linspace类似,不过它创建等比数列,参数设置为:(start, stop, num=50, endpoint=True, base=10.0, dtype=None),一般我们只设置”start, stop, num”3个参数,表示等比数列的起始点是

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值