У меня есть следующие определения трех векторов осей:
arena = np.array([[-0.1, 0.1], [-0.1, 0.1], [0.06, 0.14]], dtype=np.float32)
resolution = np.array([0.01, 0.01, 0.01], dtype=np.float32)
axes_size = np.array((arena[:, 1] - arena[:, 0]) / resolution).astype(np.int32)
axes = [np.linspace(*arena[i], axes_size[i], endpoint=False, dtype=np.float32)
for i in np.arange(axes_size.shape[0])]
Обратите внимание, что axes_size = array([20, 20, 8], dtype=int32)
.
Я пытаюсь векторизовать и обобщить следующий фрагмент кода, который создать декартово произведение axes
:
points = np.zeros([*axes_size, 3])
points[:, :, :, 0] = axes[0][:, None, None]
points[:, :, :, 1] = axes[1][None, :, None]
points[:, :, :, 2] = axes[2][None, None, :]
Обратите внимание, что points.shape = (20, 20, 8, 3)
.
Я пробовал следующее:
points = np.stack(np.meshgrid(*axes), axis=-1)
points = np.array(np.meshgrid(*axes)).T.reshape(-1, 3).T.reshape(*axes_size, 3)
Обе строки, кажется, не работают, когда сравнивая результаты, используя np.testing.assert_allclose()
, и я не могу понять почему.