【问题标题】:Get the index of the max value using argmax in numpy array在numpy数组中使用argmax获取最大值的索引
【发布时间】:2016-10-10 00:27:12
【问题描述】:
  1. 我已经分配了大约 34G 的内存并读取了数据: sst = np.empty([365,3600,7200], dtype-np.float32)

  2. 使用 argmax(sst,axis=0) 获取每个像素的最大值的索引。

  3. 运行程序时出现内存错误问题。

谁能帮我解决这个问题?还有其他方法可以获取每个像素 [365,3600,7200] 的最大值的索引吗?谢谢!

【问题讨论】:

  • 我认为您的错误来自您尝试分配如此庞大的数组。我认为您的系统没有足够的内存来执行此类操作。
  • 我总共得到了 64G 的内存。我试图保持第一步分配[365,3600,7200]。说到第二步,我尝试了半年每个像素的最大值索引argmax(sst[:183],axis=0)。程序这次有效。但我想获得全年每个像素的索引。 :(
  • 我需要保留原始索引,因为我需要知道每个像素的最大值来自哪一天。你能帮帮我吗?
  • 通常,人们会尝试限制内存的使用。当您将代码移动到另一台内存有限的计算机时,这很有用。我认为,最好循环几天,每个都得到每天照片中最大值的索引。将最大值及其位置存储在列表中。最后,您有一个包含 356 个元素的列表,每个元素的形式为 (index, max)。这可以很容易地搜索到最大值的最大值。
  • 感谢您的建议。

标签: python numpy


【解决方案1】:

This source code 表明 argMax 返回一个由该轴上的最大值填充的数组。您可以说为每个轴分配一个新数组,然后在该数组上执行 np.argMax ,而不是这样做。如果您确保在获取该最大值的索引后覆盖旧数组,您应该有更少的内存问题。

如果您正在处理大量内存不足问题,那么可能值得研究一下dask。

【讨论】:

  • 感谢您的建议!
  • 我按照同样的逻辑,对西方世界[365,3600,3600]和东方世界[365,3600,3600:7200]做了np.argMax。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2017-03-27
  • 2019-05-09
  • 2021-11-24
  • 2022-01-15
相关资源
最近更新 更多