我试图弄清楚如何在julia中处理多维数组。我有一个多维数组A = rand(5,5,5)
。
我正在尝试弄清楚如何通过输入m给出A[1,1,:]
的位置来获取A[1,:,1]
或A[:,1,1]
或:
。
我想出了
indexData = [:,1,2]
indexData[1],indexData[m] = indexData[m],indexData[1]
data = A[indexData[1],indexData[2],indexData[3]]
但这似乎过于复杂,如果A
的维度未知,则无法扩展。有没有更好的方法来解决这个问题?
答案 0 :(得分:7)
以下内容可能适合该法案:
getshaft(A,ii,m) = [A[(i==m?j:ii[i] for i=1:length(ii))...] for j=1:size(A,m)]
考虑以下示例:
julia> A = reshape(collect(1:27),3,3,3)
3×3×3 Array{Int64,3}:
[:, :, 1] =
1 4 7
2 5 8
3 6 9
[:, :, 2] =
10 13 16
11 14 17
12 15 18
[:, :, 3] =
19 22 25
20 23 26
21 24 27
julia> getshaft(A,(1,2,3),1)
3-element Array{Int64,1}:
22
23
24
第二个参数是元素索引,第三个参数选择一个维度。 getshaft
将返回值向量,包括第二个参数沿第三个参数指定的维度选择的元素。第一个参数当然是数组。
---更新---
快速回顾一下,建议更快更清洁地实现同一功能:
getshaft(A,ii,m) = A[(i==m?Colon():ii[i] for i=1:length(ii))...]
使用切片索引可能会受益于更快的索引计算或后台的其他AbstractArray法术。