知道向量的多维数组的形状,我们如何将其转换为一维的新向量(通过展平多维数组)?
例如考虑以下数组:
arr = [
[
[ nil, nil ],
[ nil, nil ],
[ nil, nil ]
],
[
[ nil, nil ],
[ nil, nil ],
[ nil, nil ]
]
]
arr[0][0][0] = "A"
arr[1][0][1] = "B"
arr # =>
[
[
[ "A", nil ],
[ nil, nil ],
[ nil, nil ]
],
[
[ nil, "B" ],
[ nil, nil ],
[ nil, nil ]
]
]
...向量A
的起点和B
终点在哪里。可以写:
shape = [2, 3, 2]
vector = [1, 0, 1]
从现在开始,假设我们 flatten arr
,我们如何翻译向量呢?换句话说,如何将这个 3 维向量转换为新的 1 维向量?
这是一种特殊情况,因为向量的原点也是数组的第一个坐标。所以我们可以找到结果:
arr.flatten.index("B") # => 7
这是另一个二维数组的例子:
arr = [
[ "A", nil ],
[ "B", nil ],
[ nil, nil ],
[ nil, nil ],
[ nil, nil ]
]
我们可以这样写:
shape = [2, 5]
vector = [1, 0]
而且,再一次,
arr.flatten.index("B") # => 2
但这里有一个更复杂的例子,带有一个负向量:
arr = [
[ "B", nil ],
[ "A", nil ],
[ nil, nil ],
[ nil, nil ],
[ nil, nil ]
]
shape = [2, 5]
vector = [-1, 0]
下面的方法怎么写?
vector2index(shape, vector) # => -2
一维数组的示例(简单):
arr = [ nil, "B", nil, nil, "A", nil, nil ]
shape = [7]
vector = [-3]
vector2index(shape, vector) # => -3
有没有一种简单的方法可以从任意维度的数组中扁平化一个向量?谢谢。