gpt4 book ai didi

python - scipy中的简单计算: minima

转载 作者:行者123 更新时间:2023-12-01 05:14:27 25 4
gpt4 key购买 nike

import numpy as np
from scipy import signal

data = np.array([[[*3, 2, 1, np.nan, np.nan],
[22, 1, 1, 4, 4],
[4, 2, 3, 3, 4],
[1, 1, 4, 1, 5],
[2, 4, 5, 2, 1]],

[[*6, 7, 10, 6, np.nan],
[np.nan, 7, 8, 6, 9],
[6, 10, 9, 8, 10],
[6, 8, 7, 10, 8],
[10, 9, 9, 10, 8]],

[[*6, 7, 10, np.nan, np.nan],
[19, 19, 8, 6, 9],
[6, 10, 9, 8, 10],
[6, 8, 7, 10, 8],
[10, 9, 9, 10, 8]],

[[*6, 7, 10, 6, np.nan],
[19, 21, 8, 6, 9],
[6, 10, 9, 8, 10],
[6, 8, 7, 10, 8],
[10, 9, 9, 10, 8]],

[[*12, 14, 12, 15, np.nan],
[19, 11, 14, 14, 11],
[13, 13, 16, 15, 11],
[14, 15, 14, 16, 14],
[13, 15, 11, 11, 14]]])

我想计算最小值。五个元素中的一个最小值,用星号显示,依此类推。因此,将有 25 个最小值,从而产生 5*5 的数组大小。我尝试如下:

data = data.reshape(5,25)
minima = data[signal.argrelmin(data,axis=0,order=1)]
print minima

但是,出现以下错误。任何想法请。

IndexError: arrays used as indices must be of integer (or boolean) type

最佳答案

注意:我的 python 现在很麻烦,所以我无法对此进行测试。如果我有什么问题请告诉我。

当您的数据重新整形为 (5,25) 时,所有数据都沿着轴 0 增加。这意味着每个 argrelmin(data,axis=0) 没有相对最小值,除非您指定 mode='wrap'。在这种情况下,每个向量的第一个元素将是最小值。但是,当向量中的所有元素都是 NaN(这确实出现在数据集中)或者最后一个元素是 NaN 时,情况不一定如此。由于 argrelmin 使用 np.less 进行比较(与 NaN 的所有比较都返回 False),我猜无论您如何修改函数调用,您都不会在这些行中找到最小值(尽管我还没有尝试过)。

总结一下:argrelmin 返回空数组的原因是因为数据集的第一个轴上没有相对最小值。另请注意,除非可以做出一些非常具体的假设(例如,数据正在增加、使用换行且无 nan),否则不能保证数据集中有 25 个最小值。

这也是为什么当沿轴 1 应用 argrelmin 时您会收到 27 个元素 - 有 27 个相对最小值。

例如,

常规:

3.、2.、1.、南、南、22.、1.、1.、4.、4.、4.、2.、3.、3.、 4.、1.、1.、4.、1.、5.、2.、4.、5.、2.、1.

带包装:

3.、2.、1.、南、南、22.、1.、1.、4.、4.、4.、2.、3.、3.、 4.、1.、1.、4.、1.、5.、2.、4.、5.、2.、1.

注意:看起来您可以创建自己的比较器来处理 NaN 并将其传递给 argrelextrema,但您仍然需要处理所有 NaN 情况等。

关于python - scipy中的简单计算: minima,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23500843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com