NumPy简介

NumPy简介

NumPy是Python中的一个开源库,它有助于数学、科学、工程和数据科学编程。它是一个非常有用的库,可以在Python中进行数学和统计操作。它对多维数组和矩阵乘法有完美的效果。它很容易与C/C++和Fortran集成。

对于任何科学项目,NumPy都是需要了解的工具。它用于处理N维数组、线性代数、随机数、傅里叶变换等。

NumPy是一种处理多维数组和矩阵的编程语言。在数组和矩阵的基础上,NumPy支持大量的数学运算。

为什么使用NumPy?

NumPy的内存效率高,这意味着它可以比其他库更容易处理大量的数据。此外,NumPy工作起来非常方便,特别是对于矩阵乘法和重塑。最重要的是,NumPy的速度很快。事实上,TensorFlow和Scikit学习使用NumPy数组来计算后端的矩阵乘法。

什么是Python NumPy数组?

NumPy数组有点像Python的列表,但同时仍有很大的不同。

正如其名称所示,NumPy数组是numpy库的一个中心数据结构。这个库的名字实际上是 "Numeric Python "或 "Numerical Python "的缩写。

  • 创建NumPy数组

在Numpy中创建一个数组的最简单方法是使用Python List

>>> import numpy as np
>>> myPythonList = [1,9,8,3]
>>> numpy_array_from_list = np.array(myPythonList)
>>> numpy_array_from_list
array([1, 9, 8, 3])
>>> a  = np.array([1,9,8,3])

注意:Numpy文档指出使用np.ndarray来创建一个数组。然而,这是推荐的方法。

也可以从一个Tuple创建一个numpy数组。

  • 数组上的数学运算

你可以在数组上进行数学运算,比如加、减、除、乘。语法是在数组名称后面加上操作(+.-,*,/),然后再加上操作数

>>> numpy_array_from_list + 10
array([11, 19, 18, 13])

array([11, 19, 18, 13])
这个操作在numpy数组的每个元素上加10。

  • 数组的shape

你可以用数组名称前面的对象形状来检查数组的形状。以同样的方式,你可以用dtypes检查类型。

>>> a = np.array([1,2,3])
>>> a.shape
(3,)
>>> a.dtype
dtype('int32')
>>> b  = np.array([1.1,2.0,3.2])
>>> b.dtype
dtype('float64')
  • 2维3维数组
>>> c = np.array([(1,2,3), (4,5,6)])
>>> c.shape
(2, 3)
>>> d = np.array([[[1, 2, 3],[4, 5, 6]],[[7, 8, 9],[10, 11, 12]]])
>>> d.shape
(2, 2, 3)

numpy.zeros()

什么是numpy.zero()?
numpy.zero()或np.zeros Python函数用于创建一个充满零的矩阵。

numpy.zero() 函数 语法

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

Shape:是numpy零数组的形状Dtype: 是numpy zeros中的数据类型。它是可选的。默认值是 float64。order: 默认为C,这是Python中numpy.zero()的一个基本行风格。

Python numpy.zeros() 示例

>>> import numpy as np
>>> np.zeros((2,2))
array([[0., 0.],
       [0., 0.]])
>>> np.zeros((2,2), dtype=np.int16)
array([[0, 0],
       [0, 0]], dtype=int16)
  • 什么是numpy.ones()?

np.ones()函数用于创建一个充满1的矩阵。

Python numpy.ones() 语法

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

Shape:是np.ones Python数组的形状;type:是numpy ones中的数据类型。它是可选的。默认值是 float64;order: 默认为C,这是一种基本的行风格。

Python numpy.ones() 带有数据类型的2D数组示例

>>> np.ones((1,2,3), dtype=np.int16)
array([[[1, 1, 1],
        [1, 1, 1]]], dtype=int16)

参考资料

Python中的numpy.reshape()函数

Reshape函数是用来塑造一个数组而不改变其数据的。在某些情况下,你可能需要将数据从宽到长进行重塑。你可以使用np.reshape函数来完成这个任务。

np.reshape()的语法

numpy.reshape(a, newShape, order='C')

a: 你想重塑的数组;newShape: 新的形状;顺序: 默认为C,这是一个基本的行风格。

NumPy重塑的例子

>>> e  = np.array([(1,2,3), (4,5,6)])
>>> e
array([[1, 2, 3],
       [4, 5, 6]])
>>> e.reshape(3,2)
array([[1, 2],
       [3, 4],
       [5, 6]])

Python中的numpy.flatten()

Flatten函数用于返回一个单维数组的副本。

np.flatten()的语法

numpy.flatten(order='C')

order: 默认为C,这是一种基本的行风格。

NumPy Flatten的例子

>>> e.flatten()
array([1, 2, 3, 4, 5, 6])

numpy.hstack()

Numpy.hstack用于水平堆叠输入数组的序列,以便形成一个单一的数组。使用hstack()函数,你可以水平地追加数据。

>>> f = np.array([1,2,3])
>>> g = np.array([4,5,6])
>>> np.hstack((f, g))
array([1, 2, 3, 4, 5, 6])

numpy.vstack()

Numpy.vstack用于垂直堆叠输入数组的序列,以便形成一个单一的数组。

>>> np.vstack((f, g))
array([[1, 2, 3],
       [4, 5, 6]])

生成随机数numpy.random.normal

numpy.random.normal(loc, scale, size)

Loc:平均值。分布的中心;Scale:标准差;size:返回的数量
例子:

#从正态分布中生成随机nmber
>>> normal_array = np.random.normal(5, 0.5, 10)
>>> normal_array
array([5.7267271 , 5.11429091, 4.72336917, 5.80205288, 4.50582939,
       4.18906482, 5.05186217, 4.54225537, 4.4914505 , 4.67761922])

NumPy的Asarray函数

Asarray()函数是在你想把一个输入转换为一个数组时使用的。输入可以是一个列表、元组、ndarray等。

语法:

numpy.asarray(data, dtype=None, order=None)[source]

data:你想转换为数组的数据;dtype: 这是一个可选的参数。如果不指定,数据类型将从输入数据中推断出来;order: 默认为C,这是基本的行风格。其他选项是F(Fortan-style)。

例子:

>>> A = np.matrix(np.ones((4,4)))
>>> A
matrix([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [1., 1., 1., 1.]])
>>> np.array(A)[2]=2
>>> np.asarray(A)[2]=2
>>> A
matrix([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [2., 2., 2., 2.],
        [1., 1., 1., 1.]])

矩阵是不可改变的。如果你想在原数组中增加修改,你可以使用asarray。

numpy.range()

numpy.range()是一个内置的numpy函数,它返回一个ndarray对象,其中包含定义的区间内的均匀间隔的值。例如,你想创建从1到10的值;你可以使用Python函数中的np.range()。

语法:

numpy.arange(start, stop, step, dtype)

start为区间起点;stop为区间的终点。step值之间的间距。默认步长为1。dtype为输出的数组类型。

>>> np.arange(1, 11)
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
>>> np.arange(1, 14, 4)
array([ 1,  5,  9, 13])

Linspace函数

Linspace给出了均匀间隔的样本。

语法:

numpy.linspace(start, stop, num, endpoint)

start: 序列的起始值;Stop: 序列的结束值;Num: 要生成的样本数。默认为50;endpoint:如果是真为闭区间。如果为假为开区间。

输出:

>>> np.linspace(1.0, 5.0, num=10)
array([1.        , 1.44444444, 1.88888889, 2.33333333, 2.77777778,
       3.22222222, 3.66666667, 4.11111111, 4.55555556, 5.        ])
>>> np.linspace(1.0, 5.0, num=5, endpoint=False)
array([1. , 1.8, 2.6, 3.4, 4.2])

logspace

语法:

numpy.linspace(start, stop, num, endpoint)

start: 序列的起始值;Stop: 序列的结束值;Num: 要生成的样本数。默认为50;endpoint:如果是真为闭区间。如果为假为开区间。

例子:

>>> np.logspace(3.0, 4.0, num=4)
array([ 1000.        ,  2154.43469003,  4641.58883361, 10000.        ])
>>> x = np.array([1,2,3], dtype=np.complex128)
>>> x.itemsize
16

索引和分片

>>> e  = np.array([(1,2,3), (4,5,6)])
>>> print('First row:', e[0])
First row: [1 2 3]
>>> print('Second row:', e[1])
Second row: [4 5 6]
>>> print('Second column:', e[:,1])
Second column: [2 5]
>>> print(e[1, :2])
[4 5]

统计函数

NumPy有不少有用的统计函数,可以从数组中的给定元素中找到最小、最大、百分位数标准差和方差等。这些函数解释如下

  • Min np.min()
  • 最大值 np.max()
  • 平均值 np.mean()
  • 中位数 np.median()
  • 标准偏差 np.std()

考虑以下数组:

>>> normal_array = np.random.normal(5, 0.5, 10)
>>> normal_array
array([5.55293581, 4.8812732 , 5.10225064, 5.8106724 , 4.976561  ,
       4.92085464, 5.00599384, 4.79906356, 5.05109114, 4.27206707])
>>> np.min(normal_array)
4.27206706557958
>>> np.max(normal_array)
5.81067239631932
>>> np.mean(normal_array)
5.037276327768497
>>> np.median(normal_array)
4.99127741937172
>>> np.median(normal_array)
4.99127741937172

Numpy.do

numpy.dot(x, y, out=None)

x,y: 输入数组。x和y都应该是1-D或2-D。out: 这是要返回的1-D数组标量的输出参数。否则应返回ndarray。

Python中的函数numpy.dot()返回两个数组x和y的点积。如果x和y都是1-D,函数dot()返回一个标量;否则,它返回一个数组。

如果x的最后一维与y的最后一维不一致,Python中的点乘会引发ValueError异常。

例子:

>>> f = np.array([1,2])
>>> g = np.array([4,5])
>>> np.dot(f, g)
14

矩阵乘

Numpy matmul()函数用来返回2个数组的矩阵乘积。下面是它的工作原理

    1. 2-D数组,它返回正常的乘积
    1. 维数>2,乘积被当作矩阵的堆栈处理
    1. 一维数组首先被提升为矩阵,然后再计算乘积

语法:

numpy.matmul(x, y, out=None)
  • x,y: 输入数组。不允许使用标量

  • out: 这是一个可选参数。通常情况下,输出存储在ndarray中。

>>> h = [[1,2],[3,4]]
>>> i = [[5,6],[7,8]]
### 1*5+2*7 = 19
>>> np.matmul(h, i)
array([[19, 22],
       [43, 50]])

计算行列式

>>> a = np.array([[1, 2], [3, 4]])
>>> np.linalg.det(a)
-2.0000000000000004
posted @ 2023-04-15 21:05  磁石空杯  阅读(98)  评论(0编辑  收藏  举报