我有
x = collect(1:9)
y = repeat([1],9)
生產
9-element Vector{Int64}:
1
2
3
4
5
6
7
8
9
9-element Vector{Int64}:
1
1
1
1
1
1
1
1
1
并希望將兩個向量垂直粘合在一起,而一些矩陣列是x,其他列是y。我發現我可以通過運行這些命令之一來等效地做到這一點:
c0 = [x y x x x]
c1 = cat(x,y,x,x,x,dims=2)
生產
9×5 Matrix{Int64}:
1 1 1 1 1
2 1 2 2 2
3 1 3 3 3
4 1 4 4 4
5 1 5 5 5
6 1 6 6 6
7 1 7 7 7
8 1 8 8 8
9 1 9 9 9
現在,我想根據控制向量x和列動態組合一個矩陣, 長度可以不同。我嘗試通過以下方式進行,但是,我將得到不同的資料結構:yV
V = [false true false false false]
[v ? x : y for v in V]
生產:
1×5 Matrix{Vector{Int64}}:
[1, 1, 1, 1, 1, 1, 1, 1, 1] [1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 1, 1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1, 1, 1, 1, 1]
我該如何解決這個問題?我非常需要這種結構,并且我對使用漂亮的 Julia 快速矢量/陣列代碼風格有濃厚的興趣/偏好,避免任何多行 for 回圈。
uj5u.com熱心網友回復:
你應該能夠使用
V = [true, false, true, true, true]
reduce(hcat, [v ? x : y for v in V])
這將首先創建您顯示的矢量,然后將矢量水平堆疊在一起。
另一種方法是首先創建一個大小合適的矩陣,例如
M = zeros(Int64, length(x), length(V))
然后用你需要的向量填充它
for (idx, i) in enumerate(V)
M[:, idx] = i ? x : v
end
編輯:
添加@DonaldSeinen 提出的這個簡潔版本
y .* .!V x .* V
uj5u.com熱心網友回復:
另一個可行的解決方案,我覺得在給定的情況下可能會有幫助:
與上述相反(正如我實際上想做的那樣),V被定義為 a 5-element Vector{Bool},而不是1×5 Matrix{Bool}.
V = [false,true,false,false,false]
然后我可以運行以下命令:
using DataFrames
DataFrames.stack([v ? x : y for v in V])
請注意,這不會創建 DataFrame,它只是根據需要使用stack函式和結果9×5 Matrix{Int64}。
注意:我覺得可能會有其他更聰明的方法來做到這一點而不需要一個包,類似于上面的其他答案,但考慮到 V 應該是一個向量。很高興閱讀評論中的建議,我將在此處添加它們。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535334.html
標籤:数组矩阵茱莉亚猫三元的
上一篇:將數字添加到數字陣列時,x=>(int)x-48是什么意思?
下一篇:使用多個陣列作為方法中的資訊
