<p>示例数据:</p>
<pre><code>df = pd.DataFrame(
{
"x":[1,5,3],
"y":[12,10,13],
"z":[4,4,1],
}
)
</code></pre>
<p>让我们定义一个函数,它取一个长度为n的向量,并返回一个<em>nxn</em>numpy数组,其中行<em>i</em>和列<em>j</em>中的元素由向量中<em>i</em>th和<em>j</em>th元素的差给出</p>
<pre><code>def d(vector):
return vector.apply(lambda x: x-vector).values
</code></pre>
<p>比如说</p>
<pre><code>d(df["x"])
</code></pre>
<p>给予</p>
<pre><code>array([[ 0, -4, -2],
[ 4, 0, 2],
[ 2, -2, 0]], dtype=int64)
</code></pre>
<p>像这样将此方法插入到公式中,一次对所有坐标对执行计算</p>
<pre><code>slopes = d(df["z"])/np.sqrt(np.square(d(df["x"])) + np.square(d(df["y"])))
</code></pre>
<p><code>slopes</code>看起来像这样</p>
<pre><code>array([[ nan, 0. , 1.34164079],
[ 0. , nan, 0.83205029],
[-1.34164079, -0.83205029, nan]])
</code></pre>
<p>注意,在公式中,未使用<em>dz</em>的绝对值。这是经过深思熟虑的,目的是不以形式“(a,b)和(b,a)”的答案结束</p>
<p>然后,我们可以使用<code>numpy.nanmax</code>计算数组的最大值,忽略<code>nan</code>值,并使用<code>numpy.where</code>提取与找到的最大值匹配的行和列</p>
<pre><code>cols, rows = np.where(slopes==np.nanmax(slopes))
</code></pre>
<p>然后我们可以把它们压缩成坐标的元组</p>
<pre><code>list(zip(rows, cols))
</code></pre>
<p>这给了我们{<cd5>}</p>
<p>所以最大斜率在第0行和第2行的坐标之间</p>