假设我有一个向量V,我想将这个向量转换为多个m x n矩阵,或者m x n从该向量 V 获取多个矩阵。对于最基本的示例:转换V = collect(1:75)为 3 个5x5矩阵。
据我所知,这可以通过首先使用 reshapereshape(V, 5, :)然后循环它来完成。Julia 有没有更好的方法而不使用循环?
如果可能,最好是可以在行优先和列优先结果之间轻松更改的解决方案。
翻译:博士
m, n, n_matrices = 4, 2, 5
V = collect(1:m*n*n_matrices)
V = reshape(V, m, n, :)
V = permutedims(V, [2,1,3])
display(V)
Run Code Online (Sandbox Code Playgroud)
根据我对 Julia 的有限了解:
执行时V = collect(1:m*n),您会在内存中初始化一个连续数组。您希望V创建一个m矩阵容器n。您可以通过这样做来实现这一点reshape(V, m, n, :),然后您可以使用 访问第一个矩阵V[:,:,1]。在这种情况下,“容器”只是另一个数组(因此您有一个三维数组),在这种情况下我们将其解释为“矩阵数组”(但您也可以将其解释为一个盒子)。然后,您可以通过交换前两个维度来转置数组中的每个矩阵,如下所示permutedims(V, [2,1,3]):
这是如何运作的
据我了解;当您不执行任何“跳过”(例如V[1:2:end])时,Julia 中的 n 维数组是内存中的连续数组。例如2 x 4矩阵A:
1 3 5 7
2 4 6 8
Run Code Online (Sandbox Code Playgroud)
就在记忆里1 2 3 4 5 6 7 8。您只需以特定方式解释数据,其中前两个数字构成第一列,然后后两个数字构成下一列,依此类推。该reshape函数只是指定您希望如何解释内存中的数据。因此,如果我们这样做,reshape(A, 4, 2)我们基本上将内存中的数字解释为“前四个值构成第一列,后四个值构成第二列”,我们将得到:
1 5
2 6
3 7
4 8
Run Code Online (Sandbox Code Playgroud)
我们基本上在这里做同样的事情,但有一个额外的维度。
根据我的观察,在这种情况下似乎也permutedims重新分配了内存。另外,如果我错了,请随时纠正我。
旧答案:
我对 Julia 不太了解,但在使用 NumPy 的 Python 中我会做这样的事情:
m, n, n_matrices = 4, 2, 5
V = collect(1:m*n*n_matrices)
V = reshape(V, m, n, :)
V = permutedims(V, [2,1,3])
display(V)
Run Code Online (Sandbox Code Playgroud)
编辑:正如 @BatWannaBe 所说,结果在技术上是一个数组(但是是三维的)。您始终可以将三维数组解释为二维数组的容器,根据我的理解,这就是您所要求的。
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |