我正在帮助一家兽医诊所测量狗爪下的压力.我使用Python进行数据分析,现在我不得不试图将爪子分成(解剖学)子区域.
我制作了每个爪子的2D阵列,它由爪子随时间加载的每个传感器的最大值组成.这是一个爪子的例子,我用Excel绘制了我想要"检测"的区域.这些是传感器周围的2×2个盒子,具有局部最大值,它们一起具有最大的总和.

所以我尝试了一些实验并决定只查找每列和每行的最大值(由于爪子的形状,不能在一个方向上查看).这似乎可以很好地"检测"单独脚趾的位置,但它也标记了相邻的传感器.

那么告诉Python哪些最大值是我想要的最好的方法是什么?
注意:2x2正方形不能重叠,因为它们必须是单独的脚趾!
我也采用2x2作为方便,欢迎任何更高级的解决方案,但我只是一个人类运动科学家,所以我既不是真正的程序员也不是数学家,所以请保持"简单".
这是一个可以加载的版本np.loadtxt
所以我尝试了@jextee的解决方案(见下面的结果).正如你所看到的,它在前爪上很有效,但后腿的效果不太好.
更具体地说,它无法识别出第四个脚趾的小峰值.这显然是循环看起来自上而下朝向最低值的事实所固有的,而不考虑这是什么.
有谁知道如何调整@jextee的算法,以便它也可以找到第4个脚趾?

由于我还没有处理任何其他试验,我不能提供任何其他样品.但我之前提供的数据是每只爪子的平均值.该文件是一个数组,其最大数据为9个爪子,它们与盘子接触的顺序.
该图像显示了它们如何在空间上展开.

我已经为任何感兴趣的人建立了一个博客,我已经设置了一个包含所有原始测量值的SkyDrive.所以对于要求更多数据的人来说:给你更大的力量!
所以在我得到关于爪子检测和爪子分类的问题的帮助后,我终于能够检查每个爪子的脚趾检测!事实证明,除了像我自己的例子中那样大小的爪子之外,它在任何东西上都不能很好地工作.事后看来,任意选择2x2是我自己的错.
这是一个错误的例子:钉子被识别为脚趾,"脚跟"如此宽,它被识别两次!

爪子太大,因此在没有重叠的情况下采用2x2尺寸会导致一些脚趾被检测到两次.相反,在小型犬中,它经常无法找到第五个脚趾,我怀疑它是由2x2区域太大引起的.
在对我的所有测量结果进行了当前的解决方案之后,我得出了令人吃惊的结论:几乎所有的小型犬都没有找到第5个脚趾,并且对于大型犬的50%以上的影响它会发现更多!
显然我需要改变它.我自己的猜测是将neighborhood小型狗的体型改为小型犬,大型犬则更大.但是generate_binary_structure不会让我改变数组的大小.
因此,我希望其他人有更好的建议来定位脚趾,也许脚趾区域尺寸与爪子尺寸一致?
你能否建议numpy/scipy的模块函数可以在1D numpy数组中找到局部最大值/最小值?显然,最简单的方法是看看最近的邻居,但我希望有一个公认的解决方案,这是numpy发行版的一部分.
我想找到固定点的列表,它们的值和位置以及它们是最小值还是最大值。
我的功能看起来像:
import numpy as np
def func(x,y):
return (np.cos(x*10))**2 + (np.sin(y*10))**2
Run Code Online (Sandbox Code Playgroud)
这是我正在考虑使用的方法:
我实际上已经在Mathematica上做了类似的事情。我一次又一次地区分函数。我看一下一阶导数为0的点,计算它们的值和位置。然后,我在那些位置取二阶导数,并检查它们是最小值还是最大值。
我还想知道是否仅对x和y中的函数值进行2D数组化,并找到该数组的最大值和最小值。但这需要我知道如何精确地定义x和y网格,以可靠地捕获函数的行为
对于后一种情况下,我已经找到像某些方面这一个。
我只是想知道,哪种方法在效率,速度,准确性甚至Python的优雅方面更有意义?