python - 给定 x,y 平面中的 MxN 网格,计算 f(x,y) 并将其存储到矩阵中(python)

标签 python numpy matrix

我在 MATLAB 中寻找类似于 ARRAYFUN 的东西,但用于 Python。我需要做的是计算一个矩阵,其分量为 exp(j*dot([kx,ky], [x,y])),其中 [kx,ky] 是固定的已知向量,[x,y ] 是网格中的一个元素。

我想做的是定义

RX, RY = np.meshgrid(np.arange(N), np.arange(M))
R = np.dstack((RX,RY))

然后遍历 R 索引,填充与 R 形状相同的矩阵,其中每个分量都是 exp(j*dot([kx,ky], [x,y])),其中 [x ,y] 在 R 中。这看起来既不高效也不优雅。

感谢您的帮助。

最佳答案

在他们添加 ARRAYFUN 之前,您可以执行我们过去在 MATLAB 中执行的操作 - 更改计算以使其适用于数组。在 MATLAB 中的一切都是二维的时代,这可能会很棘手;允许更多的维度使它更容易。 numpy 允许超过 2 个维度。

无论如何,这里是一个快速尝试:

In [497]: rx,ry=np.meshgrid(np.arange(3),np.arange(4))
In [498]: R=np.dstack((rx,ry))

In [499]: R.shape
Out[499]: (4, 3, 2)

In [500]: kx,ky=1,2

In [501]: np.einsum('i,jki->jk',[kx,ky],R)
Out[501]: 
array([[0, 1, 2],
       [2, 3, 4],
       [4, 5, 6],
       [6, 7, 8]])

还有其他版本的dotmatmultensordot,但einsum 是我喜欢的使用。我已经充分使用它来快速设置多维

现在只需将 1jexp 应用于每个元素:

In [502]: np.exp(np.einsum('i,jki->jk',[kx,ky],R)*1j)
Out[502]: 
array([[ 1.00000000+0.j        ,  0.54030231+0.84147098j,
        -0.41614684+0.90929743j],
       [-0.41614684+0.90929743j, -0.98999250+0.14112001j,
        -0.65364362-0.7568025j ],
       [-0.65364362-0.7568025j ,  0.28366219-0.95892427j,
         0.96017029-0.2794155j ],
       [ 0.96017029-0.2794155j ,  0.75390225+0.6569866j ,
        -0.14550003+0.98935825j]])

关于python - 给定 x,y 平面中的 MxN 网格,计算 f(x,y) 并将其存储到矩阵中(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822722/

相关文章:

Python C 扩展通过引用传递参数

python - 使用python删除excel文件中的NA行

opencv - 如何从单个图像获取相机变换矩阵?

python - wxpython事件处理: GetValue after key is pressed

python - 2 个地 block 的交集(鼠尾草)

python - 使用 NumPy 查找条件为 True 的范围

用于数学矩阵运算的 C 库

c++ - 将特征矩阵转换为 std::vector<std::array<>> 形式

python - 插入项目并更改数组的维度

python-3.x - 在元组内连接数组的元组