制作数组的最佳方法

时间:2017-04-11 16:41:26

标签: python numpy for-loop

我是编程新手,对于如何编写自己的for循环有点不确定。这是我想要的吗?

让我们将时间间隔[0,1]细分为 n x0=0,...,xn−1=1

编写一个返回两个numpy数组的函数compute_discrete_u(epsilon, n)

x_array包含 n 点的坐标 u_array在这些点包含 u 的离散值。

u(x)=sin(1x+ϵ)

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,你根本不需要for循环。你想使用numpy,所以你可以使用numpy构建的矢量化操作。

以下是您真正要求的功能(,很可能不是您应该如何解决问题):

# Do NOT use this.
import numpy as np

def compute_discrete_u(epsilon, n):
    x = np.linspace(0, 1, n)
    return x, np.sin(x + expsilon)

这是一个非常尴尬的API。从设计的角度来看,您在函数中混合了两个职责:

  1. 生成某个x向量
  2. 根据数学函数计算u向量。
  3. 出于复杂性和可重用性的原因,您不应该这样做。如果您希望以后使用非统一x该怎么办?

    所以你应该做什么:

    import numpy as np
    
    def compute_u(x, epsilon):
        return np.sin(x + epsilon)
    
    x = np.linspace(0, 1, num=101)
    u = compute_u(x, epsilon=1e-3)
    

    这更容易理解,因为函数只是数学函数。此外,您可以为任何您喜欢的x数组(或单个浮点数)计算u。如果您在其他地方不需要compute_u,您甚至可以完全删除它并写下u = np.sin(x + epsilon)