Python-Numpy多维数组的概述,数据类型对象,数组的属性,数组的创建流程

小编 2026-06-05 阅读:826 评论:0
一、Numpy概述          Numpy 是一个 Python 包(Numeric Python)。它是一个由多维数组对象和用于处理数组的集合组成的库。 Numpy 拥有线性代数和随机数生成的内置...

一、Numpy概述

         Numpy 是一个 Python 包(Numeric Python)。它是一个由多维数组对象和用于处理数组的集合组成的库。 Numpy 拥有线性代数和随机数生成的内置函数。Numpy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用。这种组合广泛用于替代 MatLab,是一个流行的技术计算平台。 但是,Python 作为 MatLab 的替代方案,现在被视为一种更加现代和完整的编程语言。NumPy 是开源的,这是它的一个额外的优势。使用Numpy,开发人员可以执行以下操作:

  • 数组的算数和逻辑运算。

  • 傅立叶变换和用于图形操作的例程。

  • 与线性代数有关的操作。

二、Numpy - ndarray 对象

Numpy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。

ndarray对象提取的任何元素(通过切片)由一个数组标量类型的 Python 对象表示。 下图显示了ndarray,数据类型对象(dtype)和数组标量类型之间的关系。

\"Ndarray\"

 

ndarray类的实例可以通过本教程后面描述的不同的数组创建例程来构造。 基本的ndarray是使用 NumPy 中的数组函数创建的,如下所示:

numpy.array 

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

上面的构造器接受以下参数:

序号 参数及描述
1. object 任何暴露数组接口方法的对象都会返回一个数组或任何(嵌套)序列。
2. dtype 数组的所需数据类型,可选。
3. copy 可选,默认为true,对象是否被复制。
4. order C(按行)、F(按列)或A(任意,默认)。
5. subok 默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类。
6. ndimin 指定返回数组的最小维数。

DEMO 1

import numpy as np
a = np.array([1,2,3])
print a
# 输出如下:[1, 2, 3]

DEMO 2

# 多于一个维度
import numpy as np
a = np.array([[1, 2], [3, 4]])
print a
# 输出如下:[[1, 2] 
         # [3, 4]]

DEMO 3

# 最小维度
import numpy as np
a = np.array([1, 2, 3,4,5], ndmin = 2)
print a
# 输出如下:[[1, 2, 3, 4, 5]]

DEMO 4

# dtype 参数
import numpy as np
a = np.array([1, 2, 3], dtype = complex)
print a
# 输出如下:[ 1.+0.j, 2.+0.j, 3.+0.j]

**ndarray ** 对象由计算机内存中的一维连续区域组成,带有将每个元素映射到内存块中某个位置的索引方案。 内存块以按行(C 风格)或按列(FORTRAN 或 MatLab 风格)的方式保存元素。

三、Numpy 的数据类型

Numpy 支持比 Python 更多种类的数值类型。

序号 数据类型及描述
1. bool_ 存储为一个字节的布尔值(真或假)
2. int_ 默认整数,相当于 C 的long,通常为int32int64
3. intc 相当于 C 的int,通常为int32int64
4. intp 用于索引的整数,相当于 C 的size_t,通常为int32int64
5. int8 字节(-128 ~ 127)
6. int16 16 位整数(-32768 ~ 32767)
7. int32 32 位整数(-2147483648 ~ 2147483647)
8. int64 64 位整数(-9223372036854775808 ~ 9223372036854775807)
9. uint8 8 位无符号整数(0 ~ 255)
10. uint16 16 位无符号整数(0 ~ 65535)
11. uint32 32 位无符号整数(0 ~ 4294967295)
12. uint64 64 位无符号整数(0 ~ 18446744073709551615)
13. float_ float64的简写
14. float16 半精度浮点:符号位,5 位指数,10 位尾数
15. float32 单精度浮点:符号位,8 位指数,23 位尾数
16. float64 双精度浮点:符号位,11 位指数,52 位尾数
17. complex_ complex128的简写
18. complex64 复数,由两个 32 位浮点表示(实部和虚部)
19. complex128 复数,由两个 64 位浮点表示(实部和虚部)

Numpy 数字类型是dtype(数据类型)对象的实例,每个对象具有唯一的特征。 这些类型可以是np.bool_np.float32等。

四、数据类型对象 (dtype)

数据类型对象描述了对应于数组的固定内存块的解释,取决于以下方面:

  • 数据类型(整数、浮点或者 Python 对象)

  • 数据大小

  • 字节序(小端或大端)

  • 在结构化类型的情况下,字段的名称,每个字段的数据类型,和每个字段占用的内存块部分。

  • 如果数据类型是子序列,它的形状和数据类型。

字节顺序取决于数据类型的前缀<>。 <意味着编码是小端(最小有效字节存储在最小地址中)。 >意味着编码是大端(最大有效字节存储在最小地址中)。

dtype可由以下语法构造:

numpy.dtype(object, align, copy)
# 参数为:
Object:被转换为数据类型的对象。
Align:如果为true,则向字段添加间隔,使其类似 C 的结构体。
Copy ? 生成dtype对象的新副本,如果为false,结果是内建数据类型对象的引用。

DEMO 1

# 使用数组标量类型
import numpy as np
dt = np.dtype(np.int32)
print dt
# 输出如下:int32

DEMO 2

#int8,int16,int32,int64 可替换为等价的字符串 \'i1\',\'i2\',\'i4\',以及其他。
import numpy as np
dt = np.dtype(\'i4\')
print dt
# 输出如下:int32

DEMO 3

# 使用端记号
import numpy as np
dt = np.dtype(\'>i4\')
print dt
# 输出如下:>i4

下面的例子展示了结构化数据类型的使用。 这里声明了字段名称和相应的标量数据类型。

DEMO 4

# 首先创建结构化数据类型。
import numpy as np
dt = np.dtype([(\'age\',np.int8)])
print dt
# 输出如下:[(\'age\', \'i1\')]

DEMO 5

# 现在将其应用于 ndarray 对象
import numpy as np
dt = np.dtype([(\'age\',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print a
# 输出如下:[(10,) (20,) (30,)]

DEMO6

# 文件名称可用于访问 age 列的内容
import numpy as np
dt = np.dtype([(\'age\',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype = dt)
print a[\'age\']
# 输出如下:[10 20 30]

DEMO 7

#以下示例定义名为 student 的结构化数据类型,其中包含字符串字段name,整数字段age和浮点字段marks。 #此dtype应用于ndarray对象。
import numpy as np
student = np.dtype([(\'name\',\'S20\'), (\'age\', \'i1\'), (\'marks\', \'f4\')])
print student
# 输出如下:[(\'name\', \'S20\'), (\'age\', \'i1\'), (\'marks\', \'<f4\')])

DEMO 8

import numpy as np
student = np.dtype([(\'name\',\'S20\'), (\'age\', \'i1\'), (\'marks\', \'f4\')])
a = np.array([(\'abc\', 21, 50),(\'xyz\', 18, 75)], dtype = student)
print a
# 输出如下:[(\'abc\', 21, 50.0), (\'xyz\', 18, 75.0)]

每个内建类型都有一个唯一定义它的字符代码:

  • \'b\':布尔值

  • \'i\':符号整数

  • \'u\':无符号整数

  • \'f\':浮点

  • \'c\':复数浮点

  • \'m\':时间间隔

  • \'M\':日期时间

  • \'O\':Python 对象

  • \'S\', \'a\':字节串

  • \'U\':Unicode

  • \'V\':原始数据(void

五、Numpy的数组属性

1.ndarray.shape这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小。

DEMO1​​​​​​​

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print a.shape
# 输出如下:(2, 3)

DEMO 2​​​​​​​

# 这会调整数组大小
import numpy as np
a = np.array([[1,2,3],[4,5,6]]) a.shape = (3,2)
print a
# 输出如下:
[[1, 2]

 [3, 4]

 [5, 6]]

DEMO 3

NumPy 也提供了reshape函数来调整数组大小。

import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = a.reshape(3,2)
print b
#输出如下:
[[1, 2]

[3, 4]

[5, 6]]

2.ndarray.ndim这一数组属性返回数组的维数。

DEMO 1

# 等间隔数字的数组
import numpy as np
a = np.arange(24) print a
# 输出如下:[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

DEMO 2

# 一维数组
import numpy as np
a = np.arange(24) a.ndim
# 现在调整其大小
b = a.reshape(2,4,3)
print b
# b 现在拥有三个维度
# 输出如下:
[[[ 0, 1, 2][ 3, 4, 5]
[ 6, 7, 8][ 9, 10, 11]]
[[12, 13, 14][15, 16, 17]
[18, 19, 20][21, 22, 23]]]

3.numpy.itemsize这一数组属性返回数组中每个元素的字节单位长度。

DEMO 1​​​​​​

# 数组的 dtype 为 int8(一个字节)
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.int8)
print x.itemsize
# 输出如下:1

DEMO 2

# 数组的 dtype 现在为 float32(四个字节)
import numpy as np
x = np.array([1,2,3,4,5], dtype = np.float32)
print x.itemsize
# 输出如下:4

4.numpy.flagsndarray对象拥有以下属性。这个函数返回了它们的当前值。

序号 属性及描述
1. C_CONTIGUOUS (C) 数组位于单一的、C 风格的连续区段内
2. F_CONTIGUOUS (F) 数组位于单一的、Fortran 风格的连续区段内
3. OWNDATA (O) 数组的内存从其它对象处借用
4. WRITEABLE (W) 数据区域可写入。 将它设置为flase会锁定数据,使其只读
5. ALIGNED (A) 数据和任何元素会为硬件适当对齐
6. UPDATEIFCOPY (U) 这个数组是另一数组的副本。当这个数组释放时,源数组会由这个数组中的元素更新

DEMO

下面的例子展示当前的标志。

import numpy as np
x = np.array([1,2,3,4,5])
print x.flags
输出如下:
C_CONTIGUOUS : True
F_CONTIGUOUS : True
OWNDATA : True
WRITEABLE : True
ALIGNED : True
UPDATEIFCOPY : False

六、Numpy 的数组创建例程

新的ndarray对象可以通过任何下列数组创建例程或使用低级ndarray构造函数构造。

1.numpy.empty它创建指定形状和dtype的未初始化数组。 它使用以下构造函数:

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

构造器接受下列参数:

序号 参数及描述
1. Shape 空数组的形状,整数或整数元组
2. Dtype 所需的输出数组类型,可选
3. Order \'C\'为按行的 C 风格数组,\'F\'为按列的 Fortran 风格数组

DEMO

下面的代码展示空数组的例子:
import numpy as np
x = np.empty([3,2], dtype = int)
print x
输出如下:
[[22649312 1701344351]
[1818321759 1885959276]
[16779776 156368896]]
注意:数组元素为随机值,因为它们未初始化。

2.numpy.zeros返回特定大小,以 0 填充的新数组。

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

构造器接受下列参数:

序号 参数及描述
1. Shape 空数组的形状,整数或整数元组
2. Dtype 所需的输出数组类型,可选
3. Order \'C\'为按行的 C 风格数组,\'F\'为按列的 Fortran 风格数组

DEMO1

# 含有 5 个 0 的数组,默认类型为 float
import numpy as np
x = np.zeros(5)
print x
输出如下:[ 0. 0. 0. 0. 0.]

DEMO 2

import numpy as np
x = np.zeros((5,), dtype = np.int)
print x
# 输出如下:[0 0 0 0 0]

DEMO3

# 自定义类型
import numpy as np
x = np.zeros((2,2), dtype = [(\'x\', \'i4\'), (\'y\', \'i4\')])
print x
输出如下:
[[(0,0)(0,0)]
[(0,0)(0,0)]]

3.numpy.ones返回特定大小,以 1 填充的新数组。

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

构造器接受下列参数:

序号 参数及描述
1. Shape 空数组的形状,整数或整数元组
2. Dtype 所需的输出数组类型,可选
3. Order \'C\'为按行的 C 风格数组,\'F\'为按列的 Fortran 风格数组

DEMO 1

# 含有 5 个 1 的数组,默认类型为 float
import numpy as np
x = np.ones(5) print x
输出如下:[ 1. 1. 1. 1. 1.]

DEMO 2​​​​​​​

import numpy as np
x = np.ones([2,2], dtype = int)
print x
输出如下:
[[1 1]
[1 1]]

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
标签列表