<p>可以使用<code>np.sum</code>获取数组的和。Numpy的<a href="https://realpython.com/numpy-array-programming/" rel="nofollow noreferrer">broadcasting</a>和向量化注意将所有元素分别计算,然后求和</p>
<p>以下是一个例子:</p>
<pre><code>import numpy as np
def alpine1(xis):
return np.sum(np.abs(xis * np.sin(xis) + 1.01 * xis))
xis = np.array([1, 2, 3])
print(alpine1(xis)) # 9.143425862638862
</code></pre>
<p>正如您的帖子提到的绘图,下面是Alpine1函数的热图如何应用于两个值:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
def alpine1(xis):
return np.sum(np.abs(xis * np.sin(xis) + 1.01 * xis))
x1, x2 = np.meshgrid(np.linspace(-10, 10, 500), np.linspace(-10, 10, 500))
z = np.apply_along_axis(alpine1, -1, np.dstack([x1, x2]))
plt.pcolormesh(x1, x2, z, cmap='inferno')
plt.colorbar()
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/PuL64.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/PuL64.jpg" alt="example plot"/></a></p>
<p>这是3D曲面(<code>z = Alpine1(x1, x2)</code>)的外观:</p>
<pre class="lang-py prettyprint-override"><code>import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def alpine1(xis):
return np.sum(np.abs(xis * np.sin(xis) + 1.01 * xis))
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x1, x2 = np.meshgrid(np.linspace(-10, 10, 500), np.linspace(-10, 10, 500))
z = np.apply_along_axis(alpine1, -1, np.dstack([x1, x2]))
surf = ax.plot_surface(x1, x2, z, cmap='inferno', edgecolor='none')
fig.colorbar(surf)
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/7Kwsd.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/7Kwsd.jpg" alt="3D surface plot"/></a></p>