字典中numpy数组列的Python min/max

Posted

技术标签:

【中文标题】字典中numpy数组列的Python min/max【英文标题】:Python min/max of numpy array column within a dictonary 【发布时间】:2021-08-31 07:42:42 【问题描述】:

我正在寻找一种更优雅/更有效的方法来从字典中的 numpy 数组中查找每列的最小值/最大值。

例如:

inputs = ['test1','book','panda']

total['test1'] = np.array([[1,1.5,2],[14,20,8],[5,9,2]])
total['book'] = np.array([[4,8,12],[44,2,81],[3,8,3]])
total['panda'] = np.array([[1,3,8],[104,4,51]])

现在我想找到每一列的最小值/最大值;这应该会产生一个像这样的数组:

[1, 1.5, 2],
[104, 20, 81]

我正在使用以下代码来查找第 1 列的最小值/最大值,并且我可以使用此代码的 for 循环来查找所有列,但我想应该有一种更优雅/更有效的方法实现这一目标:

# Find min and max 
min_list = []
max_list = []

for e,nam in enumerate(inputs):
    min_list.append((total[nam][:,1].min()))
    max_list.append((total[nam][:,1].max()))

min_val = min(min_list) 
max_val = max(max_list)

提前致谢!

【问题讨论】:

【参考方案1】:

您可以将您的各个列表连接成一个 Numpy 数组,然后在所需的轴上使用 minmax

total = 
total['test1'] = np.array([[1,1.5,2],[14,20,8],[5,9,2]])
total['book'] = np.array([[4,8,12],[44,2,81],[3,8,3]])
total['panda'] = np.array([[1,3,8],[104,4,51]])

stacked = np.concatenate(list(total.values()))

stacked.min(axis=0)
# array([1. , 1.5, 2. ])
stacked.max(axis=0)
# array([104.,  20.,  81.])

【讨论】:

这就是我一直在寻找的优雅/高效的代码!谢谢马克!

以上是关于字典中numpy数组列的Python min/max的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Numpy 数组添加到字典中

将CSV文件转换为Python字典,数组和二进制文件

7.+利用numpy的random模块,创建一个4行5列的数组,各元素的值为0-100的随?

python使用sklearn中的DictVectorizer函数将字典数据(dictionary)转化为numpy数组使用get_feature_names函数获取数组指定列位置的标签信息

python numpy中数组.min()

减少包含用于前端的 numpy 数组的编码 Python dict 的大小