用坐标函数初始化NumPy矩阵的最有效方法

2024-03-29 15:43:53 发布

您现在位置:Python中文网/ 问答频道 /正文

用以坐标为参数的函数的结果初始化NumPy矩阵最有效的方法是什么?你知道吗

目前,我只知道如何使用双循环,但我听说它通常不是NumPy矩阵的最佳选择。你知道吗

M = np.zeros((1000,1000))

for i in range(1000):
    for j in range(1000):
        M[i][j] = f(i,j) #where f is the desired function

有没有更好的方法用任意坐标函数的结果来实现NumPy矩阵?你知道吗

我假设这个函数实际上依赖于两个参数,即没有函数g和h是f(x,y) = h(x)g(y)。 (原文:f(x,y) = h(g(x,y)))。你知道吗


Tags: the方法函数innumpyfor参数is
1条回答
网友
1楼 · 发布于 2024-03-29 15:43:53

这个问题和公认的答案严重不符。fun不是坐标的任意函数。它是一个完全“矢量化”的,它接受可广播的数组。你知道吗

In [195]: def fun(i,j): return i*j-j**2
In [196]: 
In [196]: np.fromfunction(fun, (4,4))
Out[196]: 
array([[ 0., -1., -4., -9.],
       [ 0.,  0., -2., -6.],
       [ 0.,  1.,  0., -3.],
       [ 0.,  2.,  2.,  0.]])
In [197]: fun(np.arange(4)[:,None], np.arange(4))
Out[197]: 
array([[ 0, -1, -4, -9],
       [ 0,  0, -2, -6],
       [ 0,  1,  0, -3],
       [ 0,  2,  2,  0]])

fromfunction只需生成一组完整的坐标,并将结果数组传递给函数:

In [199]: np.indices((4,4))
Out[199]: 
array([[[0, 0, 0, 0],
        [1, 1, 1, 1],
        [2, 2, 2, 2],
        [3, 3, 3, 3]],

       [[0, 1, 2, 3],
        [0, 1, 2, 3],
        [0, 1, 2, 3],
        [0, 1, 2, 3]]])

np.meshgridnp.mgrid也可以用来生成这些坐标。像这样处理二维数组的函数不是任意的。不过,在使用numpy时,这是一个非常理想的特性。你知道吗

你的问题,或者可能是我们的问题没有得到回应,意味着ij必须是标量的,因此需要将每个i,j对分别传递给函数。例如j可能用于math.sin(j),或者函数对ij值进行了一些if测试。在这种情况下,fromfunction方法将失败。你知道吗

相关问题 更多 >