一文弄懂numpy数组

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

前言

学习数据分析,必绕不开numpy和pandas这两个库,numpy的ndarray数据结构和矩阵数据非常类似,最近搞科研的时候总是会用到,之前学的都忘记完了,所以,这次打算把numpy库的基本用法记录在一篇文章里,以便后面复习和使用。

ndarray多维数组创建

不要管复杂的概念,我们把多维数组看做成矩阵就行(实际使用中也是这样的),例如,下面的二维数据,我们就可以看做成2行3列的矩阵。

import numpy as np

b = np.array([[1,2,3],[4,5,6]])
print(b)

# [[1 2 3]
# [4 5 6]]
一切从创建说起

一个特定的数据结构,肯定有着特定的创建方式,例如列表我们就是通过[]来创建,字典我们用{}来创建。ndarray多维数组用numpy库的array方法来创建。

numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
  • object 数组或嵌套的数列(列表,元祖,数组,或者其他序列类型)

  • dtype 数组元素的数据类型,可选

  • copy 对象是否需要复制,可选

  • order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)

  • subok 默认返回一个与基类类型一致的数组

  • ndmin 指定生成数组的最小维度

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

# [1,2,3]

# 2维数组
b = np.array([[1,2,3],[4,5,6]])
print(b)

# [[1 2 3]
# [4 5 6]]

# 指定数据类型
c = np.array([[1,2,3],[4,5,6]], dtype = np.float64)
print(c)

# reslut
[[1. 2. 3.]
 [4. 5. 6.]]
特殊创建方式

numpy也提供了一些函数用于创建特殊的数组。

  • zeros,全为0数组;

  • ones,全为1数据;

  • empty,垃圾值数组。

  • full,填充任意值

一文弄懂numpy数组一文弄懂numpy数组
数值范围创建数组

我们做循环的时候经常会用到range,可以取数值范围,numpy中有个arange函数,可用于创建数组。

arr4 = np.arange(9)
arr4

# [0, 1, 2, 3, 4, 5, 6, 7, 8]

这样创建的数组只能是一维的,arange函数经常和reshape一起使用(后面还会介绍),可以创建多维的数组。

arr5 = np.arange(9).reshape(3,3)
arr5

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

ndarray数据属性

属性我们常需要调用的就是ndim,shape和dtype。

  • ndarray.ndim 秩,即轴的数量或维度的数量

  • ndarray.shape 数组的维度,对于矩阵,n 行 m 列

  • ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值

  • ndarray.dtype ndarray 对象的元素类型

  • ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位

  • ndarray.flags ndarray 对象的内存信息

  • ndarray.real ndarray元素的实部

  • ndarray.imag ndarray 元素的虚部

  • ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元- 素,所以通常不需要使用这个属性。

arr5 = np.arange(9).reshape(3,3)
print(arr5.ndim)
print(arr5.shape)
print(arr5.dtype)

2
(3, 3)
int64
改变数组数据类型

这个我们经常会用到,例如我们把整数数组转换为浮点数数组,使用astype方法,用np.float64和'float64'都可以。

一文弄懂numpy数组

切片和索引

这部分内容非常重要,我们经常要选取特定的部分数据来操作,这里就必须要用到切片和索引。

小试牛刀

和列表的切片和索引很类似,都是从0开始计数,一维数组很简单,也很好理解(和列表一样操作就行),这里就不多介绍了。

二维数组,选取数据无非就以下几种情况,选取特定的行,特定的列,或者组合,我们来看看怎么写。

特定行

一文弄懂numpy数组

特定列

一文弄懂numpy数组

特定的行和列,这部分就有点不一样了,如果行或者列中有切片,就能得到我们想要的结果,例如获取2,3行以及1,3列。

一文弄懂numpy数组

如果我们想要获取1,3行以及1,3列,用这种写法结果就不对。

一文弄懂numpy数组

这其实获取的是第一行第一列以及第三行第三列的值,这时候我们就需要用到花式索引。

花式索引

要使用np.ix_来完成。

一文弄懂numpy数组

其实不用这样写也可以,就是稍微复杂一点。我们先选取第一行和第三行,选完之后,再选取列。

一文弄懂numpy数组
布尔索引

还有一个很重要的概念,就是布尔索引。

一文弄懂numpy数组一文弄懂numpy数组

这里有两个函数需要介绍下,一个是all,一个是any,all是都为True,就返回True,any是一个为True,就返回True。

数组操作

修改数组形状

之前我们简单了解过reshape方法,可以改变数组的形状。通过flatten或者ravel可以将数组从新进行展开。

一文弄懂numpy数组
合并和分割数组

合并数组主要有以下几种方法:

  • concatenate 连接沿现有轴的数组序列

  • stack 沿着新的轴加入一系列数组。

  • hstack 水平堆叠序列中的数组(列方向)

  • vstack 竖直堆叠序列中的数组(行方向)

一文弄懂numpy数组

axis参数就是制定轴的方向,很多numpy函数都有这个参数,但是这个轴又不是很好理解,网上有很多的解释,我这里说一个很简单的解释。例如二维数组,我们索引的时候arr[i,j],i就代表0,j就代表1,也就是说,行的方向就是0,列的方向就是1。

一文弄懂numpy数组一文弄懂numpy数组

分割数组的函数为:

  • split 将一个数组分割为多个子数组

  • hsplit 将一个数组水平分割为多个子数组(按列)

  • vsplit 将一个数组垂直分割为多个子数组(按行)

numpy.split(ary, indices_or_sections, axis)
  • ary:被分割的数组

  • indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置(左开右闭)

  • axis:设置沿着哪个方向进行切分,默认为 0,横向切分,即水平方向。为 1 时,纵向切分,即竖直方向

一文弄懂numpy数组
修改数组
  • resize 返回指定形状的新数组

  • append 将值添加到数组末尾

  • insert 沿指定轴将值插入到指定下标之前

  • delete 删掉某个轴的子数组,并返回删除后的新数组

  • unique 查找数组内的唯一元素

这里要注意的是,如果不指定轴修改数组,会返回一维数组。

一文弄懂numpy数组

numpy.unique 函数用于去除数组中的重复元素。

numpy.unique(arr, return_index, return_inverse, return_counts)
  • arr:输入数组,如果不是一维数组则会展开

  • return_index:如果为true,返回新列表元素在旧列表中的位置(下标),并以列表形式储

  • return_inverse:如果为true,返回旧列表元素在新列表中的位置(下标),并以列表形式储

  • return_counts:如果为true,返回去重数组中的元素在原数组中的出现次数

一文弄懂numpy数组
翻转数组
  • transpose 对换数组的维度

  • ndarray.T 和 self.transpose() 相同

  • rollaxis 向后滚动指定的轴

  • swapaxes 对换数组的两个轴

一文弄懂numpy数组

numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下:

numpy.rollaxis(arr, axis, start)

参数说明:arr:数组 axis:要向后滚动的轴,其它轴的相对位置不会改变 start:默认为零,表示完整的滚动。会滚动到特定位置。

一文弄懂numpy数组

numpy.swapaxes 函数用于交换数组的两个轴。

一文弄懂numpy数组

数学和统计函数

numpy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等。这里就不一一介绍了,我们着重了解下复数处理函数。

numpy.around() 函数返回指定数字的四舍五入值。

numpy.around(a,decimals)

numpy.floor() 返回小于或者等于指定表达式的最大整数,即向下取整。

numpy.ceil() 返回大于或者等于指定表达式的最小整数,即向上取整。

算数函数

这里不一一介绍了,大家需要用到的时候自查即可。

  • add,相加

  • subtract,相减

  • multiply,相乘

  • divide,相除

  • reciprocal,函数返回参数逐元素的倒数。如 1/4 倒数为 4/1

  • power,第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂

  • mod,计算输入数组中相应元素的相除后的余数。函数 numpy.remainder() 也产生相同的结果。

统计函数

numpy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。sum,average等等,可以去numpy的官方文档了解更多。

条件函数

numpy.where() 函数返回输入数组中满足给定条件的元素的索引。

一文弄懂numpy数组

numpy.extract() 函数根据某个条件从数组中抽取元素,返回满条件的元素。

一文弄懂numpy数组

文件的存储与读取

  • load() 和 save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。

  • savez() 函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npz 的文件中。

  • loadtxt() 和 savetxt() 函数处理正常的文本文件(.txt 等)。

一文弄懂numpy数组一文弄懂numpy数组

savetxt() 函数是以简单的文本文件格式存储数据,对应的使用 loadtxt() 函数来获取数据。

np.loadtxt(FILENAME, dtype=int, delimiter=' ')
np.savetxt(FILENAME, a, fmt="%d", delimiter=",")

总结

numpy是Python数据科学必学的第三方库,但是说实话,一上来就学numpy其实是很痛苦的,他不像pandas那么直观,有很多实际的有趣的案例,所以本篇文章主要是将numpy的基础语法记录下来,供大家和自己以后查询所使用,最后附上numpy小抄给大家,我们下期再见。文章来源地址https://www.toymoban.com/news/detail-449527.html

一文弄懂numpy数组

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

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

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

相关文章

  • 数据分析-python学习 (1)numpy相关

    内容为:https://juejin.cn/book/7240731597035864121的学习笔记 numpy数组创建 创建全0数组,正态分布、随机数组等就不说了,提供了相应的方法 通过已有数据创建有两种 arr1=np.array([1,2,3,4,5]) 或者data=np.loadtxt(‘C:/Users/000001_all.csv’,dtype=‘float’,delimiter=‘,’,skiprows=1) (data=np.genfromtxt(‘

    2024年02月13日
    浏览(42)
  • python数据分析学习笔记之matplotlib、numpy、pandas

    为了学习机器学习,在此先学习以下数据分析的matplotlib,numpy,pandas,主要是为自己的学习做个记录,如有不会的可以随时查阅。希望大家可以一起学习共同进步,我们最终都可以说:功不唐捐,玉汝于成。就算遇到困难也不要气馁,大声说:我不怕,我敏而好学!! 把大量

    2024年02月08日
    浏览(59)
  • 一文弄懂什么是对比学习(Contrastive Learning)

    本文是自己学习对比学习的总结,如有问题,欢迎批评指正。 有的paper将对比学习称为自监督学习(Self-supervised learning),有的将其称为无监督学习(Unsupervised Learning , UL)。 自监督学习是无监督学习的一种形式。 自监督学习(Self-supervised learning)可以避免对数据集进行大量的

    2024年02月04日
    浏览(38)
  • 一文了解ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模应用

    2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其在各行各业的应用呈现了更多的可能性。202

    2024年01月20日
    浏览(44)
  • 深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)

    a.shape=(3,2);既数组h=3,w=2 a.shape=(2,3,2);这里第一个2表示axis=0维度上的,三维数组中3,2)数组的个数,这里表示两个(3,2)数组。 这里axis=0指代哪里是很重要的知识点。深度学习中经常压缩一个维度,axis=0。 numpy.squeeze()函数。 语法:numpy.squeeze(a,axis = None);作用是将shape维度为

    2024年01月18日
    浏览(49)
  • 【数据分析之道-Numpy(八)】numpy统计函数

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2024年02月06日
    浏览(43)
  • 【数据分析之道-NumPy(四)】numpy广播机制

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2023年04月19日
    浏览(49)
  • 【数据分析之道-NumPy(三)】numpy切片与索引

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2023年04月09日
    浏览(47)
  • 【数据分析 - 基础入门之NumPy⑥】- NumPy案例巩固强化

    大家好!我是初心,本期给大家带来的是 NumPy 案例巩固强化练习题,共17道,亲测。 注:题目素材来自 ——《千锋教育》 本期跟大家分享的就是这些题目了!希望大家可以多多实操练习,加强巩固,以便更好的掌握 NumPy 。 文章直达 链接 上期回顾 【数据分析 - 基础入门之

    2024年02月15日
    浏览(41)
  • 【数据分析之道-NumPy(七)】numpy字符串函数

    ✍ 作者简介: i阿极 ,CSDN Python领域新星创作者, 专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》 ,本专栏针对大学生、初级数据分析工程师精心打造,对python基础知识点逐一击破,不断学习,提升自我。 ✍ 订阅后,可以阅读《数据分析之道》中全部文章内容

    2024年02月04日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包