Python NumPy教程之数组的基本操作详解
作者:海拥 发布时间:2021-08-15 16:20:12
Numpy中的N维数组(ndarray)
Numpy 中的数组是一个元素表(通常是数字),所有元素类型相同,由正整数元组索引。在 Numpy 中,数组的维数称为数组的秩。给出数组沿每个维的大小的整数元组称为数组的形状。Numpy 中的数组类称为ndarray。Numpy 数组中的元素可以使用方括号访问,并且可以使用嵌套的 Python 列表进行初始化。
例子 :
[[ 1, 2, 3],
[ 4, 2, 5]]
Here, rank = 2 (as it is 2-dimensional or it has 2 axes)
First dimension(axis) length = 2, second dimension has length = 3
overall shape can be expressed as: (2, 3)
# 演示基本数组特征的 Python 程序
import numpy as np
# 创建数组对象
arr = np.array( [[ 1, 2, 3],
[ 4, 2, 5]] )
# arr 对象的打印类型
print("Array is of type: ", type(arr))
# 打印数组维度(轴)
print("No. of dimensions: ", arr.ndim)
# 阵列的打印形状
print("Shape of array: ", arr.shape)
# 数组的打印大小(元素总数)
print("Size of array: ", arr.size)
# 打印数组中元素的类型
print("Array stores elements of type: ", arr.dtype)
输出 :
Array is of type: <class 'numpy.ndarray'>
No. of dimensions: 2
Shape of array: (2, 3)
Size of array: 6
Array stores elements of type: int64
数组创建
在 NumPy 中有多种创建数组的方法。
例如,您可以使用array函数从常规 Python列表或元组创建一个数组。 结果数组的类型是从序列中元素的类型推导出来的。****
通常,数组的元素最初是未知的,但它的大小是已知的。因此,NumPy 提供了几个函数来创建具有初始占位符内容的数组。这些最大限度地减少了增长阵列的必要性,这是一项昂贵的操作。
例如: np.zeros、np.ones、np.full、np.empty 等。为了创建数字序列,NumPy 提供了一个类似于 range 的函数,它返回数组而不是列表。
arange: 返回给定间隔内均匀分布的值。步长是指定的。
linspace: 返回给定间隔内均匀分布的值。编号_ 的元素被返回。
重塑数组: 我们可以使用reshape方法来重塑数组。考虑一个形状为 (a1, a2, a3, ..., aN) 的数组。我们可以重新整形并将其转换为另一个形状为 (b1, b2, b3, ..., bM) 的数组。唯一需要的条件是:
a1 x a2 x a3 … x aN = b1 x b2 x b3 … x bM 。(即数组的原始大小保持不变。)扁平化数组: 我们可以使用扁平化方法将数组的副本折叠成一维。它接受order参数。默认值为“C”(用于行优先顺序)。使用“F”表示列主要顺序。
注意: 数组的类型可以在创建数组时显式定义。
# 演示数组创建技术的 Python 程序
import numpy as np
# 从浮点类型的列表创建数组
a = np.array([[1, 2, 4], [5, 8, 7]], dtype = 'float')
print ("Array created using passed list:\n", a)
# 从元组创建数组
b = np.array((1 , 3, 2))
print ("\nArray created using passed tuple:\n", b)
# 创建一个全为零的 3X4 数组
c = np.zeros((3, 4))
print ("\nAn array initialized with all zeros:\n", c)
# 创建一个复杂类型的常量值数组
d = np.full((3, 3), 6, dtype = 'complex')
print ("\nAn array initialized with all 6s."
"Array type is complex:\n", d)
输出 :
Array created using passed list:
[[ 1. 2. 4.]
[ 5. 8. 7.]]
Array created using passed tuple:
[1 3 2]
An array initialized with all zeros:
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
An array initialized with all 6s. Array type is complex:
[[ 6.+0.j 6.+0.j 6.+0.j]
[ 6.+0.j 6.+0.j 6.+0.j]
[ 6.+0.j 6.+0.j 6.+0.j]]
数组索引
了解数组索引的基础知识对于分析和操作数组对象很重要。NumPy 提供了许多方法来进行数组索引。
切片: 就像 python 中的列表一样,NumPy 数组可以切片。由于数组可以是多维的,因此您需要为数组的每个维度指定一个切片。
整数数组索引: 在此方法中,传递列表以对每个维度进行索引。完成对应元素的一对一映射以构造一个新的任意数组。
布尔数组索引: 当我们想从数组中选择满足某些条件的元素时使用此方法。
# 在 numpy 中演示索引的 Python 程序
import numpy as np
# 一个示例数组
arr = np.array([[-1, 2, 0, 4],
[4, -0.5, 6, 0],
[2.6, 0, 7, 8],
[3, -7, 4, 2.0]])
# 切片数组
temp = arr[:2, ::2]
print ("Array with first 2 rows and alternate"
"columns(0 and 2):\n", temp)
# 整数数组索引示例
temp = arr[[0, 1, 2, 3], [3, 2, 1, 0]]
print ("\nElements at indices (0, 3), (1, 2), (2, 1),"
"(3, 0):\n", temp)
# 布尔数组索引示例
cond = arr > 0 # cond is a boolean array
temp = arr[cond]
print ("\nElements greater than 0:\n", temp)
输出 :
Array with first 2 rows and alternatecolumns(0 and 2):
[[-1. 0.]
[ 4. 6.]]
Elements at indices (0, 3), (1, 2), (2, 1),(3, 0):
[ 4. 6. 0. 3.]
Elements greater than 0:
[ 2. 4. 4. 6. 2.6 7. 8. 3. 4. 2. ]
基本操作
NumPy 提供了大量的内置算术函数。
对单个数组的操作: 我们可以使用重载的算术运算符对数组进行元素操作以创建一个新数组。在 +=、-=、*= 运算符的情况下,将修改现有数组。
# 演示单个数组的基本操作的 Python 程序
import numpy as np
a = np.array([1, 2, 5, 3])
# 每个元素加 1
print ("Adding 1 to every element:", a+1)
# 从每个元素中减去 3
print ("Subtracting 3 from each element:", a-3)
# 将每个元素乘以 10
print ("Multiplying each element by 10:", a*10)
# 平方每个元素
print ("Squaring each element:", a**2)
# 修改现有数组
a *= 2
print ("Doubled each element of original array:", a)
# 数组转置
a = np.array([[1, 2, 3], [3, 4, 5], [9, 6, 0]])
print ("\nOriginal array:\n", a)
print ("Transpose of array:\n", a.T)
输出 :
Adding 1 to every element: [2 3 6 4]
Subtracting 3 from each element: [-2 -1 2 0]
Multiplying each element by 10: [10 20 50 30]
Squaring each element: [ 1 4 25 9]
Doubled each element of original array: [ 2 4 10 6]
Original array:
[[1 2 3]
[3 4 5]
[9 6 0]]
Transpose of array:
[[1 3 9]
[2 4 6]
[3 5 0]]
一元运算符:许多一元运算作为 ndarray类的方法提供。这包括 sum、min、max 等。这些函数也可以通过设置轴参数来逐行或逐列应用。
# 在 numpy 中演示一元运算符的 Python 程序
import numpy as np
arr = np.array([[1, 5, 6],
[4, 7, 2],
[3, 1, 9]])
# 数组的最大元素
print ("Largest element is:", arr.max())
print ("Row-wise maximum elements:",
arr.max(axis = 1))
# 数组的最小元素
print ("Column-wise minimum elements:",
arr.min(axis = 0))
# 数组元素之和
print ("Sum of all array elements:",
arr.sum())
# 每行的累积总和
print ("Cumulative sum along each row:\n",
arr.cumsum(axis = 1))
输出 :
Largest element is: 9
Row-wise maximum elements: [6 7 9]
Column-wise minimum elements: [1 1 2]
Sum of all array elements: 38
Cumulative sum along each row:
[[ 1 6 12]
[ 4 11 13]
[ 3 4 13]]
二元运算符: 这些操作适用于数组元素并创建一个新数组。您可以使用所有基本的算术运算符,如 +、-、/、等。如果是 +=、-=、 = 运算符,则会修改现有数组。
# 在 Numpy 中演示二元运算符的 Python 程序
import numpy as np
a = np.array([[1, 2],
[3, 4]])
b = np.array([[4, 3],
[2, 1]])
# 添加数组
print ("Array sum:\n", a + b)
# 乘法数组(元素乘法)
print ("Array multiplication:\n", a*b)
# 矩阵乘法
print ("Matrix multiplication:\n", a.dot(b))
输出:
Array sum:
[[5 5]
[5 5]]
Array multiplication:
[[4 6]
[6 4]]
Matrix multiplication:
[[ 8 5]
[20 13]]
通用函数 (ufunc): NumPy 提供熟悉的数学函数,例如 sin、cos、exp 等。这些函数还对数组进行元素操作,生成数组作为输出。
注意: 我们上面使用重载运算符所做的所有操作都可以使用 ufunc 完成,例如 np.add、np.subtract、np.multiply、np.divide、np.sum 等。
# 在 numpy 中演示通用函数的 Python 程序
import numpy as np
# 创建一个正弦值数组
a = np.array([0, np.pi/2, np.pi])
print ("Sine values of array elements:", np.sin(a))
# exponential values
a = np.array([0, 1, 2, 3])
print ("Exponent of array elements:", np.exp(a))
# square root of array values
print ("Square root of array elements:", np.sqrt(a))
输出:
Sine values of array elements: [ 0.00000000e+00 1.00000000e+00 1.22464680e-16]
Exponent of array elements: [ 1. 2.71828183 7.3890561 20.08553692]
Square root of array elements: [ 0. 1. 1.41421356 1.73205081]
数据类型
每个 ndarray 都有一个关联的数据类型 (dtype) 对象。这个数据类型对象(dtype)告诉我们数组的布局。这意味着它为我们提供了以下信息:
数据类型(整数、浮点数、Python 对象等)
数据大小(字节数)
数据的字节顺序(小端或大端)
如果数据类型是子数组,它的形状和数据类型是什么。
ndarray的值存储在缓冲区中,可以将其视为连续的内存字节块。所以这些字节将如何被解释由 dtype 对象给出。
每个 Numpy 数组都是一个元素表(通常是数字),所有元素类型相同,由正整数元组索引。每个 ndarray 都有一个关联的数据类型 (dtype) 对象。
此数据类型对象 (dtype) 提供有关数组布局的信息。ndarray 的值存储在缓冲区中,可以将其视为可以由 dtype 对象解释的连续内存字节块。Numpy 提供了大量可用于构造数组的数值数据类型。
在创建数组时,Numpy 会尝试猜测数据类型,但构造数组的函数通常还包含一个可选参数来显式指定数据类型。
# Python Program to create a data type object
import numpy as np
# np.int16 is converted into a data type object.
print(np.dtype(np.int16))
输出:
int16
# Python Program to create a data type object
# containing a 32 bit big-endian integer
import numpy as np
# i4 represents integer of size 4 byte
# > represents big-endian byte ordering and
# < represents little-endian encoding.
# dt is a dtype object
dt = np.dtype('>i4')
print("Byte order is:",dt.byteorder)
print("Size is:",dt.itemsize)
print("Data type is:",dt.name)
输出:
Byte order is: >
Size is: 4
Name of data type is: int32
来源:https://juejin.cn/post/7135688832124452894


猜你喜欢
- 记得导入包,其他按键可类比def keyPressEvent(self, event): if event.key() == Q
- 如题在SQL中 SELECT ... FROM ... ORDER BY abc ASC; 如果abc是字符串,那么结果会按照a-z 中文按
- 昨日内容:ORM高级查询-filterid=3id__gt=3id__lt=3id__lte=3id__gte=3-in /not in.f
- 蜜蜂可以看到紫外线,人则看不到;蛇和蚊子可以看到红外线,人则看不到。火狐(Firefox)浏览器也可以看到人们看不到的东西,但迄今为止,这些
- 本文实例为大家分享了Python实现用户名和密码登录的具体代码,供大家参考,具体内容如下功能登录及注册,密码错误多次后验证码确认说明初次运行
- 索引 经常要查询的语句,则给它建一个索引 表连接 select T_Oders as o join T_Customers as C on
- 本文实例讲述了MySQL截取和拆分字符串函数用法。分享给大家供大家参考,具体如下:首先说截取字符串函数:SUBSTRING(commenti
- 针对与mssql2005的安全,应当针对于2个方面来做,针对于主要的权限及端口。(要是有人说删除不安全的系统存储过程,先说好这个方式只能针对
- Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Py
- 实测mysqld –skip-grant-tables这样的命令行,在mysql8中无法成功启动,而且测试了该参数放在ini文件里面也同样无
- 本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下:这里主要测试在Python中
- 我们可以利用windows提供的api函数来实现对系统键盘事件和鼠标事件的监听,主要利用的是SetWindowsHookEx函数,这个函数可
- 在python的类中会使用到“self”,本文主要是谈谈类中的self和变量的关系。先看示例代码I。
- 一、 使用Springboot+Jpa实现对mysql数据库的增删改查和分页功能JPA是Java Persistence API的简称,中文
- 我们选择一种问题的解决办法,通常需要考虑到想要达到的效果,还有最重要的是这个办法本身的优缺点有哪些,与其他的方法对比哪一个更好。之前小编之前
- 类:在HTML中当表现class属性的时候,人们可以用点(.)号来作为~=号的一个替代选择,所以div.value等同于div[class~
- </pre><pre name="code" class="javascript"
- 在 python 中有一个 telnetlib,它的作用就是建立一个通到主机的 telnet连线实体
- MySQL、SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句。不过,你可以利用
- 本文实例讲述了Python使用Pickle库实现读写序列操作。分享给大家供大家参考,具体如下:简介pickle模块实现了用于对Python对