Logo

郎哥编程

ndarray基础与创建方法

2024-09-26 24

ndarray是由NumPy库提供的一种核心数据结构,它提供了一种高效的方式来存储和操作大型多维数组和矩阵。相比于Python内置的列表(list)等数据结构,ndarray在存储效率和操作速度上有着显著的优势。

ndarray数组

数组是有序数据的集合,其结构的最大特征就是通过有序编号固定集合内每个数据的位置,如下图所示:

数组结构图

有序编号被称为下标(或称为索引),被固定的每个数据被称为元素。数组内所包含元素的数据类型没有限制,可以是任意类型的数据。在NumPy中,数组元素为布布尔值、实数或复数。

NumPy数组也称为数组对象,它提供了多个属性和方法用于获取数组的信息,对数组进行运算,数组中的所有元素类型都是相同的,数组对象名是ndarray,别名是array。

ndarray创建方法

可以有多种方式创建ndarray数组:

(1)使用NumPy的array函数从Python列表中创建数组,数组类型由列表中的数据类型确定;

(2)使用NumPy的zeros函数创建数组元素全部为0的数组,默认情况下数组元素的类型为float64;

(3)使用NumPy的ones函数创建数组元素全部为1的数组,默认情况下数组元素的类型为float64;

(4)使用NumPy的empty函数创建数组元素为随机内容的数组,随机内容取决于存储器的状态;

(5)使用NumPy的arange函数创建等间隔的数字数组。

使用NumPy的array函数创建数组

NumPy的array函数可以创建1维、2维、……、n维数组,array函数要求传入Python列表数据,传入Python列表数据的嵌套层次决定了创建数组的维数。下面给出了创建1维和2维数组的案例,更多维数组的创建与2维数组的创建类同。

(1)创建1维数组

要创建1维数组,只需在array函数中传入单层列表数据即可。在程序中使用NumPy数学计算包,需要将NumPy包导入到程序中。

下面的代码创建了整数类型(int32)的1维数组,数组变量名称是dim1,np是numpy包的引用名称,传入到array函数的是单层列表。

>>> import numpy as np
>>> dim1 = np.array([12,19,20,22,66,89])
>>> dim1
array([12, 19, 20, 22, 66, 89])
>>>

(2)创建2维数组

只要在array函数中传入两层嵌套的列表数据即可创建2维数组。下面的代码创建了浮点类型(float64)的2维数组。

>>> dim2 = np.array([[0.3,0.11,0.98],[0.56,0.99,0.12]])
>>> dim2
array([[0.3 , 0.11, 0.98],
       [0.56, 0.99, 0.12]])

使用NumPy函数创建数组

使用NumPy的zeros、ones、empty函数可以创建指定维数的数组,zeros函数用0填充所有的数组元素,ones函数用1填充所有的数组元素,empty函数用随机内容填充所有的数组元素。

(1)创建1维数组

下面的代码分别使用zeros、ones、empty函数创建了a、b、c三个1维数组。a数组有3个元素,元素内容都为0,b数组有5个元素,元素内容都为1,c数组有3个元素,元素内容都为0(填充的元素内容机内容取决于存储器的状态)。

>>> import numpy as np
>>> a = np.zeros(3)
>>> a
array([0., 0., 0.])
>>> b = np.ones(5)
>>> b
array([1., 1., 1., 1., 1.])
>>> c = np.empty(3)
>>> c
array([0., 0., 0.])
>>>

(2)创建2维或更多维数组

使用zeros、ones、empty函数创建2维或更多维数组时,需要传入Python元组数据,元组内的元素个数(元组长度)指定了数组的维度,元素的值指定了当前元素所在的数组维度所包含元素的个数。例如:使用元组(3,4)创建的a数组是2维数组,第1维有三个元素,第2维有4个元素;使用元组(3,2,4)创建的d数组是3维数组,第1维有3个元素,第2维有2个元素,第3维有4个元素。

>>> import numpy as np
>>> a = np.zeros((3,4))
>>> a
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
>>> b = np.ones((2,3))
>>> b
array([[1., 1., 1.],
       [1., 1., 1.]])
>>> c = np.empty((2,1))
>>> c
array([[0.],
       [0.]])
>>> d = np.zeros((3,2,4))
>>> d
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.]],
       [[0., 0., 0., 0.],
        [0., 0., 0., 0.]],
       [[0., 0., 0., 0.],
        [0., 0., 0., 0.]]])
>>>

(3)创建指定类型的数组

使用zeros、ones、empty函数可以创建指定数据类型的数组,zeros、ones、empty函数创建数组时,默认的数据类型是float64,如果需要创建其它数据类型的数组,可以在函数中指定数据类型。

下面的代码创建数据类型为complex的二维数组。

>>> import numpy as np
>>> a = np.zeros((3,4),dtype=complex)
>>> a
array([[0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
       [0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
       [0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j]])
>>>

使用arange函数创建等间隔的数字数组

NumPy的arange函数可以创建等间隔的数字数组。arange函数需要传入3个参数,第一个参数是起始值,第二个参数是结束值,第三个参数指定了从起始值到结束值的间隔。例如起始值是1,结束值是10,间隔是2,则创建的数组元素为1、3、5、7、9。当第三个参数省略时,NumPy会选择数字1作为间隔数字。

下面的代码创建了count和index两个1维数组,count的间隔为1,index的间隔为2。

>>> count = np.arange(1,5)
>>> count
array([1, 2, 3, 4])
>>> index = np.arange(1,10,2)
>>> index
array([1, 3, 5, 7, 9])
>>>

NumPy数组对象的属性

NumPy的array数组对象提供了一些关键属性,可以输出数组的特性。下表给出了array数组对象的关键属性名称及作用。

序号

属性名称

作用

1

ndim

int32类型,数组维度的数量

2

shape

Python元组类型,存储每个维度数组的大小

3

size

数组元素的总数

4

dtype

数组元素的数据类型

5

itemsize

数组中每个元素的字节大小

6

data

包含数组元素的缓冲区,一般使用索引访问数组元素

下面的代码创建了2维数组a,第1维有2个元素,每个元素是一个数组,第2维有3个元素。数组的总元素个数为2*3=6,数组元素的数据类型是int32,每个字节的元素长度是4个字节。

>>> import numpy as np
>>> a = np.array([[2,3,6],[1,6,9]])
>>> a.ndim
2
>>> a.shape
(2, 3)
>>> a.size
6
>>> a.dtype
dtype('int32')
>>> a.itemsize
4
>>>

ndarray的操作方法

数组的操作是指在数组上进行数学运算,可以进行数组的乘法、除法和加减运算,并返回运算后的数组,前提条件是参加运算的两个数组的维数、元素个数和数据类型要相同。

例1 数组的运算

数组的加减乘除运算,是对两个数组相对应的元素进行运算。Numpy的数组对象还提供了一些特殊运算方法,用于计算一个数组全部元素的累加和、最大值、最小值等。下表列出了运算方法:

# 导入numpy库

import numpy as np

# 定义两个二维数组

a = np.array([[1.0, 2.0], [3.0, 4.0]]) 

b = np.array([[5.0, 6.0], [7.0, 8.0]])

# 乘法运算

multi = a * b

print("a*b=%s:" % (multi))

# 加法运算

sum = a + b

print("a+b=%s:" % (sum))

# 减法运算

difference = a - b

print("a-b=%s:" % (difference))

# 除法运算

merchant = a / b

print("a/b=%s:" % (merchant))

表中a为Numpy数组对象

序号

方法

作用

1

a.sum()

返回数组全部元素的累加和

2

a.min()

返回数组元素的最小值

3

a.max()

返回数组元素的最大值

4

a.cumsum(axis)

返回沿着指定axis的元素累加和所组成的数组,参数axis为轴索引,若an维数组,则axis的取值范围为[0,n-1]

例2 数组元素的求和、最大值和最小值运算

# 导入numpy库
import numpy as np
# 定义二维数组
a = np.array([[1.0,2.0,3.0], [3.0,4.0,5.0]]) 
# 计算数组a的累加和
total = a.sum()
print("数组a累加和:%.2f" % (total))
# 计算数组a的最大值
max = a.max()
print("数组a最大值:%.2f" % (max))
# 计算数组a的最小值
min = a.min()
print("数组a最小值:%.2f" % (min))

cumsum(axis)方法比较难理解,重点是要理解axis(轴)的概念,关于轴的概念,放到后面的课程讨论,同时也讨论cumsum(axis)方法的用法。

 

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论