擅长:python、mysql、java
<p>稍微重申一下这个问题。你知道列表的长度和列表中要考虑的数字的分数。鉴于此,您可以确定列表中第一个和最后一个索引之间的差异,这些索引为您提供了所需的范围。然后,目标是找到指标,使成本函数最小化,对应于中位数的期望对称值。在</p>
<p>让较小的索引是<code>n1</code>,而大索引是<code>n2</code>;它们不是独立的。索引列表中的值是<code>x[n1] = m-b</code>和{<cd4>}。现在要选择<code>n1</code>(因此<code>n2</code>),以便<code>b</code>和{<cd8>}尽可能接近。当<code>(b - c)**2</code>最小时会发生这种情况。使用<code>numpy.argmin</code>很容易。与问题中的示例类似,下面是一个交互式会话,演示了该方法:</p>
<pre><code>$ python
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> theList = np.log10(1+np.arange(.1, 100))
>>> theMedian = np.median(theList)
>>> listHead = theList[0:30]
>>> listTail = theList[-30:]
>>> b = np.abs(listHead - theMedian)
>>> c = np.abs(listTail - theMedian)
>>> squaredDiff = (b - c) ** 2
>>> np.argmin(squaredDiff)
25
>>> listHead[25] - theMedian, listTail[25] - theMedian
(-0.2874888056626983, 0.27859407466756614)
</code></pre>