代码之家  ›  专栏  ›  技术社区  ›  Mike Axiak

在python中对数组进行快速数学运算

  •  4
  • Mike Axiak  · 技术社区  · 16 年前

    我有一个非常简单的数学运算,我想在数组上执行。让我写出这个例子:

    A = numpy.ndarray((255, 255, 3), dtype=numpy.single)
    # ..
    for i in range(A.shape[0]):
        for j in range(A.shape[1]):
            x = simple_func1(i)
            y = simple_func2(j)
            A[i, j] = (alpha * x * y + beta * x**2 + gamma * y**2, 1, 0)
    

    所以基本上,在(i,j)和这个值的3个值之间有一个映射(这是为了可视化)。 我想把这个卷起,以某种方式矢量化这个,但我不知道该怎么做,如果可以的话。谢谢。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Olivier Verdier    16 年前

    这是矢量化版本:

    i = arange(255)
    j = arange(255)
    x = simple_func1(i)
    y = simple_func2(j)
    y = y.reshape(-1,1)    
    
    A = alpha * x * y + beta * x**2 + gamma * y**2 # broadcasting is your friend here
    

    如果要用1和0填充最后一个坐标:

    B = empty(A.shape+(3,))
    B[:,:,0] = A
    B[:,:,1] = 1 # broadcasting again
    B[:,:,2] = 0
    
        2
  •  1
  •   Community Mohan Dere    9 年前

    您必须更改simple_funcn,以便它们将数组作为输入,并创建数组作为输出。之后,您可以查看numpy.meshgrid()或 the cartesian() function here 建立坐标阵列。之后,您应该能够使用坐标数组用一条直线填充a。