从 Python 中的 3 个 1D 数组创建 3 个 3D 数组
Create 3 3D arrays from 3 1D arrays in Python
我想找到一种在 Python 中模仿 MATLAB 的 ndarray 的方法(非常不同的 ndarry 函数!)
所以如果我有 3 个 1D 数组,比如 i = 0:10、j = 0:11、k = 0:12,我想创建 3 个 3D 数组,
I、J 和 K 都是大小为 (11, 12, 13) 的 3D 数组,它们的值由下式给出:
I(x,:,:) = i(x), J(:,x,:) = j(x) 和 K(:,:,x) = k(x)
在 MATLAB 中,这很简单:
[I, J, K] = ndarray(i,j,k)
在 Python 中是否有类似的东西,没有恢复到循环 - 我似乎找不到它?
numpy.meshgrid
随心所欲
import numpy as np
I,J,K = np.meshgrid(range(2), range(3), range(4))
In [17]: print(f'I={I}')
I=[[[0 0 0 0]
[1 1 1 1]]
[[0 0 0 0]
[1 1 1 1]]
[[0 0 0 0]
[1 1 1 1]]]
In [19]: print(f'J={J}')
J=[[[0 0 0 0]
[0 0 0 0]]
[[1 1 1 1]
[1 1 1 1]]
[[2 2 2 2]
[2 2 2 2]]]
In [20]: print(f'K={K}')
K=[[[0 1 2 3]
[0 1 2 3]]
[[0 1 2 3]
[0 1 2 3]]
[[0 1 2 3]
[0 1 2 3]]]
或等价地,稍微更优雅的 mgrid
:
I, J, K = np.mgrid[0:2,0:3,0:4]
我想找到一种在 Python 中模仿 MATLAB 的 ndarray 的方法(非常不同的 ndarry 函数!)
所以如果我有 3 个 1D 数组,比如 i = 0:10、j = 0:11、k = 0:12,我想创建 3 个 3D 数组, I、J 和 K 都是大小为 (11, 12, 13) 的 3D 数组,它们的值由下式给出:
I(x,:,:) = i(x), J(:,x,:) = j(x) 和 K(:,:,x) = k(x)
在 MATLAB 中,这很简单:
[I, J, K] = ndarray(i,j,k)
在 Python 中是否有类似的东西,没有恢复到循环 - 我似乎找不到它?
numpy.meshgrid
随心所欲
import numpy as np
I,J,K = np.meshgrid(range(2), range(3), range(4))
In [17]: print(f'I={I}')
I=[[[0 0 0 0]
[1 1 1 1]]
[[0 0 0 0]
[1 1 1 1]]
[[0 0 0 0]
[1 1 1 1]]]
In [19]: print(f'J={J}')
J=[[[0 0 0 0]
[0 0 0 0]]
[[1 1 1 1]
[1 1 1 1]]
[[2 2 2 2]
[2 2 2 2]]]
In [20]: print(f'K={K}')
K=[[[0 1 2 3]
[0 1 2 3]]
[[0 1 2 3]
[0 1 2 3]]
[[0 1 2 3]
[0 1 2 3]]]
或等价地,稍微更优雅的 mgrid
:
I, J, K = np.mgrid[0:2,0:3,0:4]