Julia 中 N x d 矩阵的一般嵌套 for 循环

General nested for-loop for N x d matrix in Julia

我想在 Julia 中编写一个函数,它接受一个 N x d 数字矩阵,其中 N 是数据点的数量,d 是参数的数量:

  1. 沿每个维度提取最小值和最大值(我可以做到)
  2. 用户指定的离散化级别(例如下例中的 1.0)
  3. Returns 包含所有组合的矩阵 M x d(请参阅下面对 M 的描述)。

作为 d = 5 的一个简单示例,我采用了第 1 部分的结果,其中我获得了每个维度的最小值和最大值。

minX = [ -1.0  -0.5  -1.1  -1.0  -0.9]
maxX = [3.8  2.5  1.8  3.1  2.3]
test=[minX[i]:1.0:maxX[i] for i in 1:5]

(我特意采取了大小为 1.0 的粗步)。我的问题是如何以系统的方式循环测试(不进行 5 个 for 循环),以便我得到离散化产生的所有组合,这些组合将产生大小为 M x d 的矩阵,其中

M = prod([length(x) for x in test]) # 1200 in this example.

有一个“隐藏”函数Iterators.product迭代笛卡尔积集。

R = Iterators.product(test...)
size(R) # (5, 4, 3, 5, 4)

您所需要的只是垂直连接 R 中的元素。它可以是 R 上的单个循环来填充预分配的数组,或者更简洁地

[map(transpose ∘ collect, R)...;] # 1200 * 5 matrix