numpy的相关使用方法

2023-10-30

20210211 -

引言

之前的时候,一些关于numpy的内容都记录在另一篇文章中《pandas及numpy - 常用操作》,里面大部分都是pandas的操作,但是最近使用numpy比较多了之后,也积累了一些内容,所以这里专门记录一下。

内容列表

  1. 拼接空数组
  2. 距离的计算
  3. 向量的重复生成
  4. 数组逆序
  5. 比较两个浮点数组是否相等
  6. 输出时指定浮点数小数点位数
  7. 随机采样(获取索引)

1. 拼接空数组

最近的实验中,需要按照列来拼接相应的结果,但是一开始需要一个空数组来指定,代码逻辑就是创建一个空数组,然后在训练中,按照列来拼接,使用的函数就是np.hstack
但是一开始的时候需要创建数组,创建数组的时候,需要注意,一开始我的代码如下:

import numpy as np
tmp_array = np.array([[]])
for i in loop:
	tmp_array = np.hstack((tmp_array, xxx[:,i]))

但是这样会提示维度错误。根据[1]中的方法,应该先对这个空数组进行变形,保证维度对应;其提供了两种方法,一种是知道维度,一种是不知道维度。具体代码如下:
1)知道维度:

>>> xs = np.array([[1,2,3,4,5],[10,20,30,40,50]])
>>> ys = np.array([], dtype=np.int64).reshape(0,5)
>>> ys
array([], shape=(0, 5), dtype=int64)
>>> np.vstack([ys, xs])
array([[  1.,   2.,   3.,   4.,   5.],
       [ 10.,  20.,  30.,  40.,  50.]])

2)不知道维度

>>> ys = np.array([])
>>> ys = np.vstack([ys, xs]) if ys.size else xs
array([[ 1,  2,  3,  4,  5],
       [10, 20, 30, 40, 50]])

我的实验中知道数据的维度,使用了第一种方法,第二种方法没有测试。不过,上述代码是为了执行行的拼接,在调整维度的时候需要改变。

2. 距离的计算(向量与矩阵)

正常情况下,如果是按照欧氏距离来进行计算,可以使用自己实现的函数,但实际上已经有现成的库函数来帮助实现,scipy.spatial.distance,在这个库中,有很多函数帮助实现距离计算:

euclidean() #欧式距离
cosine() #cosine距离

但是上述两个函数都是计算连个一维向量的,如果是比较多维向量和一维向量怎么办,也就是将一个一维向量和矩阵中的每个维度有进行比较。如果是自己实现的话,也可以,当然也可以进行一些向量计算的方式。但是这种方式也是有库的,那就是使用scipy.spatial.distance.cdist
使用这种方法的时候,要注意距离类型,以及矩阵和向量的维度,保证维度的统一是关键。在官方文档的示例中:

a = np.array([[0, 0, 0],
              [0, 0, 1],
              [0, 1, 0],
              [0, 1, 1],
              [1, 0, 0],
              [1, 0, 1],
              [1, 1, 0],
              [1, 1, 1]])
b = np.array([[ 0.1,  0.2,  0.4]])
distance.cdist(a, b, 'cityblock')

3. 向量的重复生成

一般来说,numpy进行操作的时候,向量的操作也会广播到矩阵上,一般不用使用重复的方法。不过,我这里的需求本质上,是为了生成一个初始化数组,后续会对初始化数组进行完整的操作。
那么这里有两种方法,分别是np.repeatnp.tile,在[2]中后面的回答中,好像是说repeat性能更好。这里的一个需求是,重复行,下面代码展示如何重复10次。

a = np.repeat(np.arange(10).reshape(1,-1), [10], axis = 0)
a
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

4. 多维数组逆序

一般进行按照数字大小进行排序的话,可以使用np.sort,如果要逆序的话,可以利用索引方式[::-1]。但是当多维数组的时候,应该怎么办,采用的方法也比较简单,只需要前面添加索引即可[3]:

b = a[:,:,::-1]

5. 比较两个浮点数组是否相等

两个浮点数组,以下为了方便,假设为一维的浮点数组,为了比较两个数组是否完全一致,可以用一下代码:

import numpy
print(numpy.all(x_a == x_b))

但是如果两个数组不是同一种计算方式产生的,哪怕虽然都是浮点数组,他们的小数点很多位之后的不一样,会导致结果为否。这种其实是因为在存储浮点数的时候,不同的计算方式所导致,本质上他们已经非常接近,只不过在内存中有所差距。
这种情况的话,就不能使用这种方法直接比较,而是应该判断是否在一定范围内是否接近。
在文章[4]中对这部分进行了解释,但是这种是针对普通浮点数进行比较的,那么如果是数组的话,可以使用一下代码:

def float_is_close(x_a, x_b, allow_error = 1e-5):
	res = np.abs(x_a - x_b)        
	return np.all(res < allow_error)

6. 输出时指定浮点数小数点位数

在研究前面的内容时,就涉及到具体打印输出来查看结果,而正常情况下,并没有那么多小数点后位数可以查看。在文章[5]中就介绍了这部分的相关代码,具体是通过numpy的行为来控制。

import numpy as np
aa=np.random.rand(2,3)
print(aa)
np.set_printoptions(precision=4)
print(aa)

7. 随机采样数据(获取索引)

有时候要对数据进行采样,平时都是使用pandas的sample方法,直接对DF进行采样,对于标签也在整个数据里面的情况是比较方便的。但是有时候,可能需要处理numpy的情况,特别是将标签和特征分开了,那么就需要在采样的时候获取索引,这样才能保证两个数组采样的结果是一致的。搜索一下找到了解决方案,通过将整个索引来传递到函数中,这样就能获得索引。

number_of_rows = an_array.shape[0]
random_indices = np.random.choice(number_of_rows, size=2, replace=False)

这种方式。

参考

[1]Concatenating empty array in Numpy
[2]“Cloning” row or column vectors
[3]numpy reverse multidimensional array
[4]在python中如何比较两个float类型的数据是否相等
[5]numpy.ndarray类型的数组元素输出时,保留小数点后4位

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

numpy的相关使用方法 的相关文章

  • 稀有对象的 python 类型注释,例如 psycopg2 对象

    我了解内置类型 但是我如何指定稀有对象 例如数据库连接对象 def get connection and cursor gt tuple psycopg2 extensions cursor psycopg2 extensions conn
  • 反编译Python 3.9.2的PYC文件[重复]

    这个问题在这里已经有答案了 目前 我有一个 3 9 2 版本的 python 的 PYC 文件 P S 这适用于所有 3 9 及更高版本 我正在尝试反编译 PYC 文件 但它显示错误 因为 uncompyle6 或者更确切地说 新版本 de
  • Series.sort() 和 Series.order() 有什么区别?

    s pd Series nr randint 0 10 5 index nr randint 0 10 5 s Output 1 3 7 6 2 0 9 7 1 6 order 按值排序并返回一个新系列 s order Output 2 0
  • 使用 Paramiko 进行 DSA 密钥转发?

    我正在使用 Paramiko 在远程服务器上执行 bash 脚本 在其中一些脚本中 存在与其他服务器的 ssh 连接 如果我只使用 bash 不使用 Python 我的 DSA 密钥将被第一个远程服务器上的 bash 脚本转发并使用 以连接
  • 类型错误:需要二进制或 unicode 字符串,得到 618.0

    I ve been trying to implement this ML Linear Model into my dataset https www tensorflow org tutorials estimator linear L
  • 在Python上获取字典的前x个元素

    我是Python的新手 所以我尝试用Python获取字典的前50个元素 我有一本字典 它按值降序排列 k 0 l 0 for k in len dict d l 1 if l lt 51 print dict 举个小例子 dict d m
  • Arcpy 模数在 Pycharm 中不显示

    如何将 Arcpy 集成到 Pycharm 中 我尝试通过导入模块但它没有显示 我确实知道该模块仅适用于 2 x python arcpy 在 PyPi Python 包索引 上不可用 因此无法通过 pip 安装 要使用 arcpy 您需要
  • python 中的 <> 运算符有什么作用?

    我刚刚遇到这个here http www feedparser org feedparser py 总是这样使用 if string1 find string2 lt gt 1 pass 什么是 lt gt 运算符这样做 为什么不使用通常的
  • Plotly:如何检查基本图形结构(版本 4)

    对于旧版本的plotly 例如在 Jupyterlab 中 您可以简单地运行figure像这样检查你的图形的基础知识 Ouput data marker color red size 10 symbol 104 mode markers l
  • python中basestring和types.StringType之间的区别?

    有什么区别 isinstance foo types StringType and isinstance foo basestring 对于Python2 basestring是两者的基类str and unicode while type
  • 从 Flask 运行 NPM 构建

    我有一个 React 前端 我想在与我的 python 后端 API 相同的源上提供服务 我正在尝试使用 Flask 来实现此目的 但我遇到了 Flask 找不到我的静态文件的问题 我的前端构建是用生成的npm run build in s
  • Python bug - 或者我的愚蠢 - 扫描字符串文字时 EOL

    我看不出以下两行之间有显着差异 然而第一个解析 而后者则不解析 In 5 n Axis of Awesome In 6 n Axis of Awesome File
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • 如何将带有参数的Python装饰器实现为类?

    我正在尝试实现一个接受一些参数的装饰器 通常带有参数的装饰器被实现为双重嵌套闭包 如下所示 def mydecorator param1 param2 do something with params def wrapper fn def
  • minizinc python 安装

    我通过 anaconda 提示符在 python 上安装了 minizinc 就像其他软件包一样 pip install minizinc 该软件包表示已成功安装 我可以导入该模块 但是 我正在遵循基本示例https minizinc py
  • 如何从namedtuple实例列表创建pandas DataFrame(带有索引或多索引)?

    简单的例子 from collections import namedtuple import pandas Price namedtuple Price ticker date price a Price GE 2010 01 01 30
  • pandas 中数据帧中的随机/洗牌行

    我目前正在尝试找到一种方法来按行随机化数据框中的项目 我在 pandas 中按列洗牌 排列找到了这个线程 在 pandas 中对 DataFrame 进行改组 排列 https stackoverflow com questions 157
  • 将 Keras 集成到 SKLearn 管道?

    我有一个 sklearn 管道 对异构数据类型 布尔 分类 数字 文本 执行特征工程 并想尝试使用神经网络作为我的学习算法来拟合模型 我遇到了输入数据形状的一些问题 我想知道我想做的事情是否可能 或者我是否应该尝试不同的方法 我尝试了几种不
  • 用于插入或替换 URL 参数的 Django 模板标签

    有人知道 Django 模板标签可以获取当前路径和查询字符串并插入或替换查询字符串值吗 例如向 some custom path q how now brown cow page 3 filter person 发出请求 电话 urlpar
  • 定义在文本小部件中双击时选择哪些字符

    在 Windows 上 双击文本小部件中的单词也将选择连接的标点符号 有什么方法可以定义您想要选择的角色吗 tcl wordchars该变量的值是一个正则表达式 可以设置它来控制什么被视为 单词 字符 例如 通过双击 Tk 中的文本来选择单

随机推荐