(一)NumPy Ndarray对象的介绍

学前准备

        需要提前安装下载好numpy模块,下载方式我就不列举出来了,大家可以上菜鸟教程或者CSDN上随便一搜都一大把。

介绍

Numpy是一个功能强大的库,它提供了一个重要的对象,即N维数组(Ndarray)。N维数组就是一组相同类型数据的集合,而且我们可以通过索引来访问这些数据。

可以把N维数组看作是一块内存中存储的数据,它的每个元素都占用相同的存储空间。

N维数组由以下几个部分组成:

  1. 数据(Data):Ndarray对象中存储的实际数据。数据可以是任意类型的,如整数、浮点数、布尔值等。数据以一维数组形式存储,但可以通过索引和切片操作来访问和处理多维数据。

  2. 维度(Dimension):Ndarray对象中数据的维度信息。维度表示数据数组的形状(shape),即各维度的大小。例如,一个二维数组的维度为(行数, 列数)。维度信息帮助我们理解和操作数组的结构。

  3. 数据类型(Data Type):Ndarray对象中数据的类型信息。数据类型决定了数据的存储方式和可执行的操作。例如,可以使用整数类型存储整数数据,使用浮点数类型存储实数数据。NumPy提供了丰富的数据类型选项,如int、float、bool等,以及不同精度的数值类型。

  4. 内存连接(Memory Contiguous):Ndarray对象中数据在内存中是一块连续的区域。这种连续的存储方式使得数据可以高效地处理和计算。Ndarray对象会记录数据在内存中的起始位置,并根据维度信息和数据类型,计算出每个元素在内存中的偏移量。

  5. 数据访问方式(Access Method):Ndarray对象支持通过索引、切片、布尔掩码等方式来访问和操作数据。通过索引和切片,可以获取指定元素或子数组;通过布尔掩码,可以根据条件来过滤和选取数据。

创建Ndarray对象

调用函数:

  • numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)

参数说明:

名称描述
object数组或嵌套的数列
dtype数组元素的数据类型,可选
copy对象是否需要复制,可选
order创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok默认返回一个与基类类型一致的数组
ndmin指定生成数组的最小维度

实例演示

 首先需要注意的是,我们在导入Numpy模块时,会默认给它一个简称np。

  • import numpy as np

创建一个简单的Ndarray对象

import numpy as np

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

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

a = np.array([1, 2], [3, 4])
# TypeError: Field elements must be 2- or 3-tuples, got '3'

        通过这一示例,我们发现Ndarray对象和列表很相似,但是不同之处在于列表中两个数字之间由逗号隔开,而Ndarray对象中用的是空格隔开。

        还有一点需要注意的,object只接受一个参数,所以在你传入多个数据参数如[1,2],[3,4]时会抛出异常。

dtype参数

dtype: 定义创建数组内元素的数据类型

import numpy as np

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

a = np.array([1, 2, 3], dtype=float)
print(a)  # [1. 2. 3.]

a = np.array([1, 2, 3], dtype=complex)
print(a)  # [1.+0.j 2.+0.j 3.+0.j]

        我们可以通过给定不同的dtype值给数据设定不同的数据类型。

copy参数

copy: 这个参数用于指定是否复制数据。如果copy为True(默认值),则会创建数组的副本;如果copy为False,则会使用传入的对象的数据来创建数组。

import numpy as np

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

b[0] = 100

print(a)  # [1 2 3]
print(b)  # [100   2   3]

import numpy as np

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

b[0] = 100

print(a)  # [100   2   3]
print(b)  # [100   2   3]

copy为True相当于深拷贝,指向不同指针域;copy为False相当于浅拷贝,指向相同指针域。

order参数

order: 这个参数用于指定数组在内存中的存储方式。默认值是None,表示使用C风格的存储顺序,即逐行存储。如果指定为'F',则使用Fortran风格的存储顺序,即逐列存储。

import numpy as np

a = np.arange(6).reshape((2, 3))
arr1 = np.array(a, order='C')
arr2 = np.array(a, order='F')

print(arr1)
# 输出:
# [[0 1 2]
#  [3 4 5]]

print(arr2)
# 输出:
# [[0 2 4]
#  [1 3 5]]

subok参数

subok: 这个参数用于控制返回的数组是否是子类(subclasses)数组。默认值是False,表示返回的数组不是子类数组。如果subok为True,则返回的数组可以是输入对象的子类数组。

import numpy as np

# 创建矩阵
a = np.mat([1, 2, 3, 4])
# 输出为矩阵类型
print(type(a))  # <class 'numpy.matrix'>
# 既要赋值一份副本,又要保持原类型
T = np.array(a, subok=True)
F = np.array(a)  # 默认为False
print('T.subok为True:', type(T))  # T.subok为True: <class 'numpy.matrix'>
print('F.subok为False:', type(F))  # F.subok为False: <class 'numpy.ndarray'>

ndmin参数

ndmin: 定义创建数组的维度

import numpy as np 
a = np.array([1, 2, 3, 4, 5], ndmin =  2)  
print (a)  # [[1,2,3,4,5]]

传入参数不匹配

# 输入数组为嵌套数组时,需要定义dtype=object,否则抛出异常

a = np.array([1, 2, [1, 4, 3], 3], dtype=object)
print(a)  # [1 2 list([1, 4, 3]) 3]

# 当输入列表长度不匹配时,需要定义dtype=object,否则抛出异常

a = np.array([[1, 2, 3, 7], [1, 4, 3]], dtype=object)
print(a)  # [list([1, 2, 3, 7]) list([1, 4, 3])]

此时输出的数组仍是一维数组,只不过它将列表对象看做了一个参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值