python - NumPy:如何使用 argmin/max 输出沿单个维度折叠 N 维数组?

标签 python multidimensional-array matrix numpy slice

是否有一种直接的方法可以使用在 N 维数组的单个维度上调用 NumPy 的 argmaxargmin 函数的输出来定义该数组的索引?

这可能最好用一个例子来解释。考虑下面的例子 随时间变化的温度读数的二维网格:

>>> import numpy as np
>>> times = np.array([0, 20])
>>> temperature_map_t0 = np.array([[10, 12, 14], [23, 40, 50]])
>>> temperature_map_t1 = np.array([[20, 12, 15], [23, 10, 12]])
>>> temperature_map = np.dstack([temperature_map_t0, temperature_map_t1])

以及包含相应压力读数的相同形状的N维数组:

>>> pressure_map = np.random.rand(*temperature_map.shape)

我们可以找到每个位置的最高温度:

>>> top_temperatures = temperature_map.max(axis=2)
>>> top_temperatures
array([[20, 12, 15],
       [23, 40, 50]])

以及它们发生的时间:

>>> times = times[temperature_map.argmax(axis=2)]
>>> times
array([[20,  0, 20],
       [ 0,  0,  0]])

但是我们如何使用Temperature_map.argmax(axis=2)来找到对应的 压力?

>>> pressures_at_top_temperatures = pressures[ ???? ]

换句话说 - 折叠单个维度的索引语法是什么 使用该维度的 argminargmax 索引的 N 维数组?

最佳答案

归功于Jaime当我有 similar problem 时谁回答了

import numpy as np
times = np.array([0, 20])
temperature_map_t0 = np.array([[10, 12, 14], [23, 40, 50]])
temperature_map_t1 = np.array([[20, 12, 15], [23, 10, 12]])
temperature_map = np.dstack([temperature_map_t0, temperature_map_t1])
top_temperatures = temperature_map.max(axis=2)

# shape is a tuple - no need to convert
# http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.shape.html
pressure_map = np.random.rand(*temperature_map.shape)

idx = temperature_map.argmax(axis=2)

s = temperature_map.shape
result pressure_map[np.arange(s[0])[:, None], np.arange(s[1]), idx]

关于python - NumPy:如何使用 argmin/max 输出沿单个维度折叠 N 维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107992/

相关文章:

python - 如何发送命令并让 Errbot 私下回复我?

python - 在Python中运行时获取局部变量的名称

python - Groupby 用逗号分隔总和

c - c 中的二维数组的输出方式不正确

multidimensional-array - D - 为多维静态数组的结构成员设置默认值

R - 每个第 n 个元素的快速行和矩阵

arrays - Haskell 数组(矩阵)元素访问

python - 在 Python 的不同终端中打开 SSH session 并运行命令

c - 传递二维数组然后没有得到值

c - 递归函数探索矩阵的最小参数数