Julia 中 N x d 矩阵的一般嵌套 for 循环
General nested for-loop for N x d matrix in Julia
我想在 Julia 中编写一个函数,它接受一个 N x d
数字矩阵,其中 N
是数据点的数量,d
是参数的数量:
- 沿每个维度提取最小值和最大值(我可以做到)
- 用户指定的离散化级别(例如下例中的 1.0)
- 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
我想在 Julia 中编写一个函数,它接受一个 N x d
数字矩阵,其中 N
是数据点的数量,d
是参数的数量:
- 沿每个维度提取最小值和最大值(我可以做到)
- 用户指定的离散化级别(例如下例中的 1.0)
- 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