我曾通读过其他问题,其他人试图找出np.partitionnp.argpartitionk个最小值.然而,这些看起来像是简单的一维或二维数组来操作.

我所拥有的是一个3D数组,我对其进行2D切片,并try 找到如下4个最小值:

import numpy as np
np.random.seed(556)

big_array = np.random.randint(0,200,size = (15,9,3))
for i in range(3):
    min_vals = np.sort(big_array[:,:,i].flatten())[:4]
    print("The smallest values for last axis #{} are: {:.1f},{:.1f},{:.1f},{:.1f}".format(i,*min_vals))

不幸的是,当第k个参数大于您试图指定的任何轴的维度时,np.partition似乎不喜欢它,可能是因为我没有完全理解其语法.同样,它看起来不像np.sortnp.argsort有多轴参数的选项.

有没有一种方法可以在不使用for循环或列表理解的情况下实现这一点?

推荐答案

IIUC,您可以沿着第一个轴对重新整形的数组进行排序,并从中提取结果.你的循环和展平是一样的:

big_array.reshape(-1, big_array.shape[-1])

因此,您的代码将为:

top_4_per_last_axis = np.sort(big_array.reshape(-1, big_array.shape[-1]), 0)[:4]

结果:

array([[ 0,  2,  0],
       [ 1,  3,  2],
       [ 1,  6,  3],
       [ 2,  9, 12]])

Python相关问答推荐

Pandas基于另一列的价值的新列

使用itertools出现第n个子串

使用decorator 自动继承父类

Pandas 按照特殊规则保留每n行

已安装' owiener ' Python模块,但在导入过程中始终没有名为owiener的模块

Ibis中是否有一个ANY或ANY_UTE表达,可以让我比较子查询返回的一组值中的值?

删除pandas rame时间序列列中未更改的值

模型序列化器中未调用现场验证器

遵循轮廓中对象方向的计算线

跟踪我已从数组中 Select 的样本的最有效方法

使用numpy提取数据块

当多个值具有相同模式时返回空

numba jitClass,记录类型为字符串

Gekko:Spring-Mass系统的参数识别

如何让剧作家等待Python中出现特定cookie(然后返回它)?

log 1 p numpy的意外行为

如何设置视频语言时上传到YouTube与Python API客户端

如何启动下载并在不击中磁盘的情况下呈现响应?

使用特定值作为引用替换数据框行上的值

找到相对于列表索引的当前最大值列表""