hh1717

导航

Python(1):Numpy库

Python(1):Numpy库

1.什么是numpy库

​ NumPy 是 Python 中一个重要的数值计算库,它提供了一个强大的多维数组对象(numpy.ndarray)和一系列用于处理这些数组的函数。NumPy 提供了快速、高效的数组操作功能,使得 Python 成为了进行科学计算和数据分析的一种流行选择。

2.如何安装numpy库

​ 因为numpy是一个python库,所以使用python包管理工具pip或者conda都可以安装。

安装python后,打开cmd命令行,输入:

pip install numpy

​ 即可完成安装。

3.numpy主要功能

  1. 多维数组对象(numpy.ndarray:NumPy 提供了一个高效的多维数组对象,这个对象可以表示向量、矩阵以及更高维度的数组。NumPy 的数组比 Python 原生的列表(list)更加高效,特别是在进行大规模数据处理时。
  2. 广播(Broadcasting):NumPy 提供了广播功能,可以使得不同大小的数组在进行数学运算时表现得像同样大小的数组一样,这样可以简化代码,并且提高计算效率。
  3. 矢量化操作:NumPy 提供了许多用于对数组进行矢量化操作的函数,这些函数可以直接对整个数组进行操作,而无需使用显式的循环,这样可以提高代码的简洁性和执行效率。
  4. 数学函数和线性代数运算:NumPy 包含了大量的数学函数和线性代数运算,包括基本的数学运算(如求和、求积、求幂等)、三角函数、指数和对数函数、统计函数、排序、矩阵乘法等。
  5. 随机数生成:NumPy 包含了用于生成各种分布的随机数的函数,如均匀分布、正态分布、泊松分布等。

4.numpy数组:ndarry

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
'''
object:任何暴露数组接口方法的对象

dtype:数据类型

copy:如果为 True,则 object 对象被复制,否则,只有当__array__返回副本(该方法在转换对象为 NumPy 数组时选择了生成一个新的数组,而不是共享原始对象的数据。这通常意味着对数组的修改不会影响到原始对象,因为它们是独立的。),object 是嵌套序列(嵌套序列指的是包含其他序列(如列表、元组、集合等)作为元素的序列),或者需要副本来满足任何其他要求(dtype,order等)时,才会生成副本。

order:指定阵列的内存布局。 如果 object 不是数组,则新创建的数组将按行排列(C),如果指定了(F),则按列排列。 如果 object 是一个数组,则以下成立。C(按行)、F(按列)、A(原顺序)、K(元素在内存中的出现顺序)

subok:默认情况下,返回的数组被强制为基类数组。 如果为 True,则返回子类。

ndmin:返回数组的最小维数
'''
import numpy as np

a = [1,2,3]
b = np.array(a)

print(a)
print(type(b))

b = np.array(a,dtype=float)
print(b)
print(b.dtype)

运行结果:
[1 2 3]
<class 'numpy.ndarray'>
[1. 2. 3.]
float64
4.1.copy的用法
import numpy as np

a = np.array([1, 2, 3])
b = np.array(a, copy=True)
c = np.array(a, copy=False)
#copy为True时不改变原对象,为False是不创建副本则改变原对象
a[0] = 0

print(a)
print(b)
print(c)

运行结果:
[0 2 3]
[1 2 3]
[0 2 3]
4.2 ndmin参数用法

​ ndmin参数被用来指定生成的数组的最小维度。即使输入的数据是一维数组或二维数组,也会根据 ndmin 参数生成具有至少指定维度的数组

import numpy as np

a = [1, 2, 3]
b = np.array(a, ndmin=2)

print(b)

运行结果:
[[[1 2 3]]]

5.numpy数组属性

​ numPy 数组的维度(又称维数)称为秩(rank),一维数组的秩为 1,二维数组的秩为 2。 numPy 中每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。

​ numpy数组有多种属性,一下列举了常见的属性:

ndarray.ndim  秩,即轴的数量或维度的数量

ndarray.shape  数组的维度,对于矩阵,n 行 m 列

ndarray.size  数组元素的总个数,相当于 .shape 中 n*m 的值

ndarray.dtype  ndarray对象的元素类型

ndarray.itemsize  ndarray对象中每个元素的大小,以字节为单位

ndarray.flags  ndarray对象的内存信息
'''
C_CONTIGUOUS  数据是在一个单一的C风格的连续段中

F_CONTIGUOUS  数据是在一个单一的Fortran风格的连续段中

OWNDATA  数组拥有它所使用的内存或从另一个对象中借用它

WRITEABLE  数据区域可以被写入,将该值设置为 False,则数据为只读

ALIGNED  数据和所有元素都适当地对齐到硬件上

WRITEBACKIFCOPY  UPDATEIFCOPY 已弃用,由 WRITEBACKIFCOPY 取代;

UPDATEIFCOPY  这个数组是其它数组的一个副本,当这个数组被释放时,原数组的内容将被更新

'''

ndarray.real  ndarray元素的实部(复数的实部)

ndarray.imag  ndarray元素的虚部(复数的虚部)

ndarray.data  包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

6.numpy中常数的表示

正无穷:Inf = inf = infty = Infinity = PINF

负无穷:NINF

正零:PZERO

负零:NZERO

非数值:nan = NaN = NAN

自然数e:e

π:pi

伽马:euler_gamma

None 的别名:newaxis

7.创建numpy数组

7.1 numpy.empty

​ 创建一个指定维度(shape)、数据类型(dtype)的未初始化的数组。

numpy.empty(shape, dtype=float, order='C')

shape	一个表示数组维度的元组
dtype	数据类型
order	有 "C" 和 "F" 两个选项
7.2 numpy.zeros

​ 创建指定维度,以 0 填充的新数组。

numpy.zeros(shape, dtype=float, order='C')
7.3 numpy.ones

​ 创建指定维度,以 1填充的新数组。

numpy.ones(shape, dtype=float, order='C')
7.4 numpy.full

​ 返回给定维度和类型的新数组,填充fill_value

numpy.full(shape, fill_value, dtype=None, order='C')

'''
shape  返回数组的维度

fill_value  填充值

dtype  返回数组的数据类型,默认值 None 指:np.array(fill_value).dtype

order  在计算机内存中的存储元素的顺序,只支持 'C'(按行)、'F'(按列),默认 'C'

'''

8.数值范围角度创建numpy数组

8.1 numpy.arange

​ 等效于python内置的range函数,只不过类型为ndarry不是列表,切记!!!

arange([start,] stop[, step,], dtype=None)

'''
[ ] 括起来的表示可选参数。

start  起始值,默认为 0

stop  终止值(不包含)

step  步长,默认为1

dtype  创建的 ndarray 的数据类型,如果没有提供,则会使用输入数据的类型。
'''
#例:
import numpy as np

a = np.arange(5)
b = np.arange(10,20,2)

print(a)
print(b)

运行结果:
[0 1 2 3 4]
[10 12 14 16 18]
8.2 numpy.linspace

​ 创建一个一维等差数列的数组,与 arange 函数不同,arange 是固定步长,而 linspace 则是固定元素数量。

linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
'''
start 序列的起始值                                                 
stop  序列的终止值,如果 endpoint 为 True,则该值包含于数列中      
num   要生成的等步长的样本数量,默认为 50                          
endpoint 该值为 Ture 时,数列中中包含 stop 值,反之不包含,默认是 True。 
retstep 如果为 True 时,生成的数组中会显示间距,反之不显示。         
dtype ndarray 的数据类型                                           
'''
8.3 numpy.logspace

​ numpy.logspace函数用于创建一个等比数列。

numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
'''
start 序列的起始值为:base ** start (幂运算)

stop 序列的终止值为:base ** stop。如果 endpoint 为 True,该值包含于数列中

num 要生成的等步长的样本数量,默认为50

endpoint 该值为 Ture 时,数列中中包含 stop 值,反之不包含,默认是 True。

base 对数 log 的底数。

dtype ndarray 的数据类型
'''
8.4 numpy.geomspace

​ 创建一个一维等比数列。

numpy.geomspace(start, stop, num=50, endpoint=True, dtype=None, axis=0)
'''
start 序列的起始值

stop 序列的终止值,如果 endpoint 为 True,该值包含于数列中

num 要生成的样本数量,默认为 50

endpoint 该值为 Ture 时,数列中中包含 stop 值,反之不包含,默认是 True。

dtype ndarray的数据类型

axis 1.16.0 版本中的新功能,值为 0 和 -1 的时候结果相同,其他时候都报错。

'''

9.numpy从已有数组创建新数组

9.1 numpy.asarray

​ numpy.asarray类似 numpy.array,但 numpy.asarray的参数只有三个。

numpy.asarray(a, dtype=None, order=None)
'''
a	输入数据,可以转换为数组的任何形式。 这包括列表,元组列表,元组,元组元组,列表元组和 ndarray。
dtype	数据类型
order	在计算机内存中的存储元素的顺序,只支持 'C'(按行)、'F'(按列),默认 'C'
'''

9.2 numpy.frombuffer

​ numpy.frombuffer用于实现动态数组。numpy.frombuffer接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。

numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)
'''
buffer 实现了 __buffer__ 方法的对象,(不是任意对象都可以)

dtype 返回数组的数据类型

count 读取的数据数量,默认为 -1,读取所有数据。

offset 读取的起始位置,默认为 0。
'''

#buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。
import numpy as np
import array

a = array.array('i', [1, 2, 3, 4])
print(a)

na = np.frombuffer(a, dtype=np.int_)
print(na)

a[0] = 10
print(a)
print(na)

运行结果:
array('i', [1, 2, 3, 4])
[1 2 3 4]
array('i', [10, 2, 3, 4])
[10  2  3  4]

#array.array 创建的数组对象内存是连续的(这里不能用 list,会报:AttributeError: 'list' object has no attribute '__buffer__'),numpy.frombuffer 从 array.array 的内存中创建数组,从上例中可以看出,改变 array.array 的值,numpy.frombuffer 的值也会跟着改变,由此可见。
9.2 numpy.formiter

​ numpy.fromiter方法从可迭代对象中建立 ndarray 对象,返回一维数组。

numpy.fromiter(iterable, dtype, count=-1)
'''
iterable	可迭代对象
dtype	返回数组的数据类型
count	读取的数据数量,默认为 -1,读取所有数据
'''
#看起来有点像 numpy.array,array 方法需要传入的是一个 list,而 fromiter 可以传入可迭代对象。
9.3 empty_like

​ 返回一个与给定数组具有相同维度和类型的未初始化的新数组。

numpy.empty_like(prototype, dtype=None, order='K', subok=True)
'''
prototype 给定的数组

dtype 覆盖结果的数据类型,版本1.6.0中的新功能。

order 指定阵列的内存布局。C(按行)、F(按列)、A(原顺序)、K(元素在内存中的出现顺序)

subok 默认情况下,返回的数组被强制为基类数组。 如果为 True,则返回子类。
'''
9.4 zeros_like

​ 同上

9.5 ones_like

​ 同上

9.6 numpy.full_like

​ 返回与给定数组具有相同维度和类型的并以 fill_value 填充的数组。

numpy.full_like(a, fill_value, dtype=None, order='K', subok=True)
'''
a 给定的数组

fill_value 填充值

dtype 返回数组的数据类型,默认值 None,则使用给定数组的类型

order 指定阵列的内存布局。C(按行)、F(按列)、A(原顺序)、K(元素在内存中的出现顺序)

subok 默认情况下,返回的数组被强制为基类数组。 如果为 True,则返回子类。
'''

posted on 2024-03-16 11:17  _Tenderness  阅读(61)  评论(3)    收藏  举报