我想创建一个输出预定义大小数组的函数。该函数取决于变量x
,y
,rx
,ry
和d
。变量x
和y
与笛卡尔值直接相关。 rx
和ry
是从函数生成的斑点的半径。
我已经将数组索引从左上角的传统0, 0
转换到最中间的像素。该数组的长度和宽度应始终为奇数。
下面的斑点一次给我一个数组。我需要一堆可以加在一起的数组。当我更改x
和y
时,数组的大小会改变,但是我需要数组的大小相同或在边界处归零。
我有一些下面的代码:
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))))
答案 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
扩展为所需的最终大小的数组。