当前位置: 首页 > 面试题库 >

使用Numpy数组作为查找表

钱青青
2023-03-14
问题内容

我有一个从.csv文件读取的Numpy数据的2D数组。每行代表一个数据点,最后一列包含一个“键”,该键与另一个Numpy数组(即“查找表”)中的“键”唯一对应。

将第一个表中的行与第二个表中的值进行匹配的最佳(最Numpythonic)方法是什么?


问题答案:

一些示例数据:

import numpy as np

lookup = np.array([[  1.     ,   3.14   ,   4.14   ],
                   [  2.     ,   2.71818,   3.7    ],
                   [  3.     ,  42.     ,  43.     ]])

a = np.array([[ 1, 11],
              [ 1, 12],
              [ 2, 21],
              [ 3, 31]])

在查找表中建立一个从键到行号的字典:

mapping = dict(zip(lookup[:,0], range(len(lookup))))

然后,您可以使用字典来匹配行。例如,如果您只想加入表:

>>> np.hstack((a, np.array([lookup[mapping[key],1:] 
                            for key in a[:,0]])))
array([[  1.     ,  11.     ,   3.14   ,   4.14   ],
       [  1.     ,  12.     ,   3.14   ,   4.14   ],
       [  2.     ,  21.     ,   2.71818,   3.7    ],
       [  3.     ,  31.     ,  42.     ,  43.     ]])


 类似资料:
  • Numpy 中包含了一些函数用于处理数组,本节重点介绍如下几类: 修改数组形状; 翻转数组; 格式转换。 1. 修改数组形状 常用的修改数组形状的函数有: 函数 说明 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 ravel 返回展开数组 1.1 reshape numpy.reshape 函数可以在不改变

  • 问题内容: 我有以下数组 我想找到连续为零的数组的开始和结束索引,输出上方的数组如下所示 我想做得尽可能高效。 问题答案: 这是一个相当紧凑的矢量化实现。我已经更改了一些要求,所以返回值有点“ numpythonic”:它创建一个形状为(m,2)的数组,其中m是零的“游程”数。第一列是每次运行中前0个的索引,第二列是运行后第一个非零元素的索引。(例如,此索引模式匹配切片的工作方式以及函数的工作方式

  • 我正在用python实现kmeans算法。我正在测试初始化质心的新方法,并希望实现它,看看它会对集群产生什么影响。 我的想法是从我的数据集中选择数据点,使质心初始化为数据的边缘点。 简单示例2属性示例: 假设这是我的输入数组 我想从这个数组中选择[3,3][3,-3][3,3][3,-3]的边点。所以如果我的k是4,这些点会被选中 在我工作的数据有4和9个属性和大约300个数据点在我的数据集中 注

  • 问题内容: 是否有numpy-thonic方法(例如函数)在数组中查找最接近的值? 例: 问题答案:

  • 问题内容: 我有两个numpy数组: 我想从p_rem中的p_a_colors中删除所有列,所以我得到: 我认为,某些事情应该像 但我只是不知道轴或[:]正确。 我知道 可以,但是我试图避免(python)循环,因为我也想要正确的性能。 问题答案: 这就是我要做的: 您需要执行void dtype事情,以便numpy整体比较行。之后,使用内置的set例程似乎是显而易见的方法。

  • 问题内容: 我有一个形状为(x,y)的2d数组,我想将其转换为形状为(x,y,1)的3d数组。有没有很好的Pythonic方式可以做到这一点? 问题答案: 除了其他答案,您还可以将切片与结合使用: 甚至这个(可以在任意数量的尺寸下使用):

  • 问题内容: 如何检查numpy数组是否为空? 我使用了以下代码,但是如果数组包含零,则此操作将失败。 这是解决方案吗? 问题答案: 您可以随时查看属性。它定义为一个整数,并且在数组中没有元素时为零():

  • 问题内容: 我想获取与行匹配的二维Numpy数组的索引。例如,我的数组是这样的: 我想获取与行[0,1]相匹配的索引,该行是索引3和15。当我执行类似的操作时,… 我想要索引数组([3,15])。 问题答案: 您需要使用函数来获取索引: 或者,如文档所述: 如果仅给出条件,则返回 您可以直接调用返回的数组: 分解: 并在该数组上调用方法(使用)可为您提供两个均为True的位置: 并获取哪些索引是: