如何使函数输出具有预定义大小的数组?

时间:2019-07-15 18:44:53

标签: python numpy

我想创建一个输出预定义大小数组的函数。该函数取决于变量xyrxryd。变量xy与笛卡尔值直接相关。 rxry是从函数生成的斑点的半径。

我已经将数组索引从左上角的传统0, 0转换到最中间的像素。该数组的长度和宽度应始终为奇数。

下面的斑点一次给我一个数组。我需要一堆可以加在一起的数组。当我更改xy时,数组的大小会改变,但是我需要数组的大小相同或在边界处归零。

我有一些下面的代码:

def equation(x, y):
    return 1 * np.exp(-(x**2 + y**2))


def make_matrix(xs, ys, x_min=nxs, y_min=nys): #makes cartesian values
    out = [] #outputs array
    for i in range(x_min, xs - center_x):
        row = []
        for j in range(y_min, ys - center_y):
            row.append(equation(i, j))
        out.append(row)
    return out

blob = np.asarray(list(np.float_(make_matrix(x, y))))

1 个答案:

答案 0 :(得分:1)

矢量化是您的朋友。当您的函数可以针对整个数组逐个元素地求值时,无需逐个元素地列出列表。

def make_matrix(xs, ys, x_min=nxs, y_min=nys):
    x = np.arange(x_min, xs - center_x).reshape(1, -1)
    y = np.arange(y_min, ys - center_y).reshape(-1, 1)
    out = np.exp(-(x**2 + y**2))
    return out

reshape操作为x创建一个1xN行向量,为y创建一个Nx1列向量。这些形状可确保broadcasting操作中的add (+)x**2 + y**2扩展为所需的最终大小的数组。