Numpy 结构化数组

Numpy 结构化数组,前面介绍了数组创建,在Numpy中,不仅可以创建规模和结构更加复杂的数组,叫做结构化数组,它包含的是结构或记录而不是独立的元素。

其他Numpy数组的创建可以参考极客教程NumPy 创建数组NumPy 从已有数组创建数组NumPy 从数值范围创建数组

结构化数组创建

可以创建一个简单的结构化数组,其中元素为结构体。可以用dtype选项指定一系列用逗号隔开的说明符,指明组成结构体的元素及它们的数组类型和顺序。如下所示:

bytes                 b1
int                   i1,i2,i4,i8
unsigned ints         u1,u2,u4,u8
floats                f2,f4,f8
complex               c8,c16
fixed length strings a<n>

我们可以创建由一个整数、一个长度为6的字符串、一个长度为4的float类型和一个长度为8位的复数类型组成的结构体,在dtype选项中按顺序指定各自的说明符,如下所示:

import numpy as np

structured = np.array([(1, 'First', 0.5, 1+2j), (2, 'Second', 1.3, 2-2j),
                       (3, 'Third', 0.8, 1+3j)], dtype=('i2, a6, f4, c8'))
print(structured)

输出结果如下:
在这里插入图片描述

我们可以在数组类型dtype选项中明确指定每个元素的类型,如int8,uint8,float16,complex64等,如下所示:

import numpy as np

structured = np.array([(1, 'First', 0.5, 1+2j), (2, 'Second', 1.3, 2-2j),
                       (3, 'Third', 0.8, 1+3j)], dtype=('int16, a6, float32, complex64'))
print(structured)

输出结果如下:
在这里插入图片描述

获取结构化数组的行和列

上述两种做法结果相同,生成的数组中,dtype序列包含结构体各项的名称及相应的数据类型。使用索引值,就能获取到包含相应结构体的行,如下所示:

import numpy as np

structured = np.array([(1, 'First', 0.5, 1+2j), (2, 'Second', 1.3, 2-2j),
                       (3, 'Third', 0.8, 1+3j)], dtype=('i2, a6, f4, c8'))
print(structured[1])

输出结果如下:

(2, b'Second', 1.3, 2.-2.j)

自动赋给结构体每个元素的名称可以看成数组列的名称,用它们作为结构化索引,就能引用类型相同或是位于同列的元素。

import numpy as np

structured = np.array([(1, 'First', 0.5, 1+2j), (2, 'Second', 1.3, 2-2j),
                       (3, 'Third', 0.8, 1+3j)], dtype=('i2, a6, f4, c8'))
print(structured['f1'])

输出结果如下:

[b'First' b'Second' b'Third']

如上所见,自动分配的名称的第一个字符f(field,字段),后面紧跟的是表示它在序列中位置的整数。其实,用更有意义的内容作为名字,用处更大。在创建数组时,可以指定各字段的名称。如下所示:

import numpy as np

structured = np.array([(1, 'First', 0.5, 1+2j), (2, 'Second', 1.3, 2-2j),
                       (3, 'Third', 0.8, 1+3j)],
                      dtype=[('id','i2'), ('position','a6'), ('value','f4'), ('complex', 'c8')])
print(structured['position'])

输出结果如下:

[b'First' b'Second' b'Third']

另一种方式就是创建完成后,重新定义结构化数组的dtype属性,在元组中指定各字段的名称,如下所示:

import numpy as np

structured = np.array([(1, 'First', 0.5, 1+2j), (2, 'Second', 1.3, 2-2j),
                       (3, 'Third', 0.8, 1+3j)], dtype=('i2, a6, f4, c8'))
structured.dtype.names = ('id', 'order', 'value', 'complex')
print(structured['order'])

输出结果如下:

[b'First' b'Second' b'Third']

相关文章参考:
NumPy 创建数组
Numpy 数组操作
NumPy 矩阵库(Matrix)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NumPy是Python中用于科学计算的一个重要库,它提供了高性能的多维数组对象以及对这些数组进行操作的函数。NumPy数组排序是对数组元素进行排序的操作,可以按照升序或降序排列。 NumPy提供了多种排序函数,其中最常用的是`np.sort()`函数和`ndarray.sort()`方法。`np.sort()`函数返回一个已排序的数组副本,而`ndarray.sort()`方法则直接在原数组上进行排序。 对于结构化数组,它是一种特殊类型的NumPy数组,其中每个元素都可以包含多个字段。结构化数组可以通过定义dtype(数据类型)来创建,每个字段都有一个名称和一个数据类型。 下面是对NumPy数组排序和结构化数组的介绍: 1. NumPy数组排序: - `np.sort()`函数:返回一个已排序的数组副本,不改变原数组。 - `ndarray.sort()`方法:直接在原数组上进行排序,不返回副本。 - 可以指定`axis`参数来沿着指定轴进行排序。 - 可以使用`kind`参数指定排序算法,如快速排序('quicksort')、归并排序('mergesort')或堆排序('heapsort')。 - 可以使用`order`参数指定按照某个字段进行排序。 2. 结构化数组: - 结构化数组是一种特殊类型的NumPy数组,每个元素都可以包含多个字段。 - 可以通过定义dtype来创建结构化数组,每个字段都有一个名称和一个数据类型。 - 可以使用`np.dtype()`函数定义dtype,指定字段名称和数据类型。 - 可以通过索引或字段名称访问结构化数组的元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值