擅长:python、mysql、java
<p>正如其他人所指出的,语法问题在于<code>lambda</code>。在</p>
<p>我不认为你想要<code>p2De[:0]</code>-那是一个空数组。<code>p2De[0]</code>是第一行。<code>p2De[0,:]</code>是相同的,它向人类读者清楚地表明您选择了2d数组的第一行。在</p>
<p>使用map或comprehension是可行的,但是它们没有提供比简单循环(因为您不需要替换所有值)的太多优势(如果有的话):</p>
<pre><code>for i,v in enumerate(p2De[0,:]):
if v<1:
p2De[0,i] = 1
</code></pre>
<p>但是这些迭代都不是好的<code>numpy</code>实践。你应该试着用向量运算来思考。通常的做法是使用布尔掩码(或索引)来选择应更改的值:</p>
^{pr2}$
<p>还有一个<code>numpy</code>函数,它应用如下限制,<code>np.maximum</code>:</p>
<pre><code>p2De[0,:] = np.maximum(p2De[0,:], 1)
</code></pre>
<p><code>np.clip</code>同时应用最小和最大边界:</p>
<pre><code>p2De[0,:] = np.clip(p2De[0,:], minbd, maxbd)
np.clip(p2De[0,:], minbd, maxbd, p2De[0,:]) # alt calling method
</code></pre>
<hr/>
<p>Python(3)的老板们鼓励我们在地图和lambda上使用函数和理解。例如,如果<code>plist</code>是与您的<code>p2De[0,:]</code>行类似的列表:</p>
<pre><code>def clip(x):
return 1 if x<1 else x
plist = [clip(x) for x in plist]
plist = [min(x, 1) for x in plist] # using a builtin for this simple case
</code></pre>