有人能提出一种有效的方法,在一列中为另一列中的每个唯一值获取最高值吗
np。数组如下所示[column0,column1,column2,column3]
[[ 37367 421 231385 93]
[ 37368 428 235156 93]
[ 37369 408 234251 93]
[ 37372 403 196292 93]
[ 55523 400 247141 139]
[ 55575 415 215818 139]
[ 55576 402 204404 139]
[ 69940 402 62244 175]
[ 69941 402 38274 175]
[ 69942 404 55171 175]
[ 69943 416 55495 175]
[ 69944 407 90231 175]
[ 69945 411 75382 175]
[ 69948 405 119129 175]]
其中我想根据第3列的唯一值返回第1列的最高值。之后的新数组应该是这样的:
[[ 37368 428 235156 93]
[ 55575 415 215818 139]
[ 69943 416 55495 175]]
我知道如何通过循环来做到这一点,但这不是我所关心的,因为我工作的桌子很大,我想避免循环
这里有一种方法-
# Lex-sort combining cols-1,3 with col-3 setting the primary order
sidx = np.lexsort(a[:,[1,3]].T)
# Indices at intervals change for column-3. These would essentially
# tell us the last indices for each group in a lex-sorted array
idx = np.append(np.flatnonzero(a[1:,3] > a[:-1,3]), a.shape[0]-1)
# Finally, index into idx with lex-sorted indices to give us
# the last indices in a lex-sorted version, which is equivalent
# of picking up the highest of each group
out = a[sidx[idx]]
样本运行-
In [234]: a # Input array
Out[234]:
array([[ 25, 29, 19, 93],
[ 27, 59, 14, 93],
[ 24, 46, 15, 93],
[ 79, 87, 50, 139],
[ 13, 86, 32, 139],
[ 56, 25, 85, 142],
[ 62, 62, 68, 142],
[ 27, 25, 20, 150],
[ 29, 53, 71, 150],
[ 64, 67, 21, 150],
[ 96, 57, 73, 150]])
In [235]: out # Output array
Out[235]:
array([[ 27, 59, 14, 93],
[ 79, 87, 50, 139],
[ 62, 62, 68, 142],
[ 64, 67, 21, 150]])
通过视图提高性能
我们可以使用a[:,1::2]
而不是a[:,[1,3]]
来切片,以使用相同的内存空间,从而有望带来性能改进。让我们验证内存视图-
In [240]: np.may_share_memory(a,a[:,[1,3]])
Out[240]: False
In [241]: np.may_share_memory(a,a[:,1::2])
Out[241]: True
问题内容: 我有一个字符串列表。我想为每个字符串分配一个唯一的数字(确切的数字并不重要),并依次使用这些数字创建一个长度相同的列表。以下是我的最佳尝试,但由于以下两个原因,我不满意: 假定相同的值彼此相邻 我必须以开头列表,否则输出将不正确 我的代码: 我想使代码更通用,因此可以使用未知列表。有任何想法吗? 问题答案: 无需使用外部库(检查 EDIT 以获取解决方案),您可以按照以下步骤进行操作:
问题内容: 我有一个表,其中包含商店中每件商品的单价和其他详细信息。 另一个包含每个订单中包含的项目的详细信息。 现在我要计算 请注意,我希望它成为表本身的一部分,而不是作为其他视图或查询。我怎样才能做到这一点?我为此研究了触发器和其他机制,但是它们是否适用于不同表中的值,尤其是在存在此类约束的情况下? 我尝试过根据另一列计算出的Column进行以下触发吗?: 但这似乎没有用 问题答案: 这是如何
问题内容: 我正在尝试查询“标签”列中的所有唯一值。标签列中的每一行都可以包含多个值。因此,在不被迫进行规范化的情况下,如何查询多值列? 示例行: 问题答案: 如果最大元素数量是可预测的,则可以使用此方法(请注意,您需要使用,而不是) 看起来有些笨拙,但应该可以完成工作。未经测试,因此,在值之前或之后可能会出现一个逗号逗号
问题内容: 我有一个MySQL表,其中包含以下类型的信息: 这是我用来从该表获取数据的脚本示例: 该脚本显示表格中的每个日期,例如 我只想显示唯一的日期,例如 问题答案: 在MySQL中使用DISTINCT运算符:
我试图找到矩阵中每列的最小值和最大值,但我当前的代码运行不正确。我试图把最小值放在一个新矩阵的第一行,最大值放在下一行,并对每一列这样做。任何帮助都将不胜感激,谢谢!
如何在同一表中从一列插入值到另一列? 说我有: 我要求: 换句话说,我想复制'Suburb2'和'Date',并将它们分别作为新行插入'Date'和'suburban'。 我知道我可以通过首先复制到临时列/s并稍后清理来实现这一点,但我想知道是否有一种方法可以在一个查询中实现这一点? 我试过了 但得到的列“日期”不存在错误。