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中文资源 请在github上点赞,谢谢!
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个数组的矩阵乘积。下面是它的工作原理
-
- 2-D数组,它返回正常的乘积
-
- 维数>2,乘积被当作矩阵的堆栈处理
-
- 一维数组首先被提升为矩阵,然后再计算乘积
语法:
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
标签:Python,简介,数组,numpy,np,array,NumPy
From: https://www.cnblogs.com/testing-/p/17321886.html