【numpy基础】--结构化

这篇具有很好参考价值的文章主要介绍了【numpy基础】--结构化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目前为止,介绍的numpy数组基本都是关于数值的,其实,numpy本身就是一个用于数值计算的基础库。

不过,除了数值计算之外,numpy也能够支持结构化数组

1. 关联不同类型数据

numpy的数组为了提高计算性能,要求数组的数据类型要一致。
但是现实情况下,我们经常遇到不是纯数值的数组,比如:

name = ["harry", "tom", "annie"]
sex = ["male", "male", "female"]
age = [40, 31, 14]

arr = np.array([name, sex, age])
print(arr)
#运行结果
[['harry' 'tom' 'annie']
 ['male' 'male' 'female']
 ['40' '31' '14']]

上面三个数组的类型不一致,放到一个numpy数组中时,可以看出,age数组被自动转换为字符串类型了。

为了保持 age 数组的原有数据类型,就要用到numpy结构化数组了。

arr = np.zeros(
    3,
    dtype={"names": ("name", "sex", "age"), 
           "formats": ("U10", "U10", "i4")},
)
print(arr)
#运行结果
[('', '', 0) ('', '', 0) ('', '', 0)]

arr["name"] = name
arr["sex"] = sex
arr["age"] = age
print(arr)
#运行结果
[('harry', 'male', 40) 
 ('tom', 'male', 31)
 ('annie', 'female', 14)]

定义数组时,定义不同的namesformats,这样,最后得到了结构化的数组,每个元素是一个元组元组中的三个元素分别是namesexage

这样的数组,保持了原数组的数据的类型。
补充:上面代码中的 U10 表示长度小于10 的字符串,i4 表示占4个字节的整数。

2. 结构化数组

生成结构化数组的关键在于定义不同的数据类型。
定义数据了类型有两种方式:
第一种是用字典,类似上面的示例那样,

dtp = np.dtype(
    {"names": ("name", "sex", "age"), 
     "formats": ("U10", "U10", "i4")}
)
arr = np.zeros(3, dtype=dtp)

arr["name"] = name
arr["sex"] = sex
arr["age"] = age
print(arr)
#运行结果
[('harry', 'male', 40) 
 ('tom', 'male', 31)
 ('annie', 'female', 14)]

还有一种方式是用元组列表来定义:

dtp = np.dtype([
    ("name", "U10"), 
    ("sex", "U10"),
    ("age", "i4")
])
arr = np.zeros(3, dtype=dtp)

arr["name"] = name
arr["sex"] = sex
arr["age"] = age
print(arr)
#运行结果
[('harry', 'male', 40) 
 ('tom', 'male', 31)
 ('annie', 'female', 14)]

两种方式定义出的结构化数组是一样的。

3. 更复杂的结构

除了定义上面那种类似excel表格的二维结构之外,numpy的数组也能定义跟复杂的结构。
比如定义学生的成绩列表:

dtp = np.dtype([("name", "U10"), ("scores", "f4", (3))])
arr = np.zeros(3, dtype=dtp)
print(arr)
#运行结果
[('', [0., 0., 0.]) 
 ('', [0., 0., 0.]) 
 ('', [0., 0., 0.])]

arr["name"] = ["harry", "tom", "annie"]
arr["scores"] = [[100, 95.5, 93], [89, 90, 78.5], [77.5, 76, 90]]
print(arr)
#运行结果
[('harry', [100. ,  95.5,  93. ]) 
 ('tom', [ 89. ,  90. ,  78.5])
 ('annie', [ 77.5,  76. ,  90. ])]

每个学生对应一个成绩列表,列表中包含3个成绩。

4. 总结回顾

总的来说,numpy结构化数组并不常用,对于结构化数组,使用 pandas库来操作更好。
numpy库一般作为纯数值计算的底层来使用,其实pandas也是基于 numpy 的。

此外,还有很多其他的python科学计算的库也是基于numpy的。文章来源地址https://www.toymoban.com/news/detail-525561.html

到了这里,关于【numpy基础】--结构化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第五章 结构化设计

    一种软件开发活动,定义实现需求规约所需的软件结构。 结构化设计分为: (1)总体设计:确定系统的整体模块结构,即系统实现所需要的软件模块以及这些模块之间的调用关系。 (2)详细设计:详细描述模块。 体系结构设计(MSD) 接口设计 数据设计 实现软件设计的目标对结

    2024年02月08日
    浏览(48)
  • elasticsearch结构化查询(一)

    在上一篇中我们介绍了DSL相关的知识,接下来我们将会学习elasticsearch的结构化查询,同时也实践一下上一篇的DSL的查询用法 从《Elasticsearch权威指南》上摘取部分解释如下: 从上面的定义我们可以看出来结构化查询最重要的就是是否匹配么人并不是很关心相关性和分值计算。

    2024年02月05日
    浏览(48)
  • SQL:结构化查询语言

    创建一张表并插入数据: 以下常用函数以MySQL为例,其它数据库类似

    2024年02月06日
    浏览(41)
  • WPF 界面结构化处理

    WPF 框架是开源的,但是不能跨平台,可以使用MAUI,这个框架可以跨平台,WPF源码可以在github上下载,下载地址:https://gitbub.com/dotnet/wpf。 框架结构 如图 XAML:eXtensible Application Markup Language的英文缩写,相应的中文名称为:可扩展应用程序标记语言。 命名空间 默认 映射:x/

    2024年02月13日
    浏览(50)
  • 【案例】--非结构化数据中台案例

    最近接触一个平台架构的讨论,公司需要一个非结构化数据中台,理念是能够满足存储随时变换的非结构化数据,另外引入低代码思想。由于非结构化数据是未知的,不同业务的数据是不同,为了更好的使用,低代码就需要一种方案,在尽量不开发代码下满足相关需求变化,

    2024年02月10日
    浏览(51)
  • 结构化流(Structured Streaming)

    有界数据: 无界数据: 结构化流是构建在Spark SQL处理引擎之上的一个流式的处理引擎,主要是针对无界数据的处理操作。对于结构化流同样也支持多种语言操作的API:比如 Python Java Scala SQL … Spark的核心是RDD。RDD出现主要的目的就是提供更加高效的离线的迭代计算操作,RDD是针

    2024年01月17日
    浏览(46)
  • MATLAB结构化程序设计

    1 、实验目的: 1)巩固并加深对MATLAB语言程序设计知识的理解; 2)掌握和提高MATLAB语言编程和程序调试的基本技能; 3)进一步理解和运用结构化程序设计的思想和方法; 4)提高运用MATLAB语言解决实际问题的能力。 2-1)、分别使用for语句和while语句求1~100的和。 while语句

    2023年04月08日
    浏览(30)
  • Structured Concurrency:结构化并发

    https://ericniebler.com/2020/11/08/structured-concurrency/ 是什么:一种确保子操作在父操作之前完成的方式,类似函数在调用函数之前完成。 最典型的结构化并发:C++20的协程 意义:它通过使异步生存期与普通C++词法作用域相对应,为异步程序带来了现代C++风格,并且不需要引用计数(

    2024年02月05日
    浏览(51)
  • 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据

    【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 本章节讲解一种自定义数据类型

    2024年02月10日
    浏览(41)
  • 结构化日志记录增强网络安全性

    日志是一种宝贵的资产,在监视和分析应用程序或组织的 IT 基础结构的整体安全状况和性能方面发挥着至关重要的作用。它们提供系统事件、用户活动、网络流量和应用程序行为的详细记录,从而深入了解潜在威胁或未经授权的访问尝试。虽然组织历来依赖于传统的日志记录

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包