2
A
回答
6
copy
是什麼您要找的:b = copy(a)
。
確實,您也可以使用collect
或Array
來完成這項工作,但有什麼不同?在Julia中,有許多方便的助手函數/宏可以用來挖掘引擎蓋下發生的事情。
@which
,@edit
或@less
經常用於確定哪個方法被調用的源代碼:
julia> a = rand(3,3)
julia> @which collect(a)
collect(itr) at array.jl:273
julia> @which Array(a)
(::Type{T}){T}(arg) at sysimg.jl:53
julia> @less collect(a)
collect(itr) = _collect(1:1 #= Array =#, itr, iteratoreltype(itr), iteratorsize(itr))
...
...
julia> @less Array(a)
(::Type{T}){T}(arg) = convert(T, arg)::T
...
...
在這裏,代碼告訴collect
視爲a
(陣列)作爲一個迭代,然後做了一些迭代操縱的東西,而不是隻有淺拷貝。如果您想深入瞭解代碼,我推薦使用Julia的調試軟件包Gallium.jl
。 Array(a)
只做了一個比collect
好的轉換,但也沒有必要。對於copy
的代碼實際上是非常低的水平:
copy{T<:Array}(a::T) = ccall(:jl_array_copy, Ref{T}, (Any,), a)
另一種強大的工具,是@code_xxx
宏:
julia> @code_
@code_llvm @code_lowered @code_native @code_typed @code_warntype
例如,你可以檢索和比較LLVM-IR代碼來觀察的差異:因爲它不僅僅是一個簡單的複製更
julia> @code_llvm Array(a)
define %jl_value_t* @julia_Type_73446(%jl_value_t*, %jl_value_t**, i32) #0 {
top:
%3 = alloca %jl_value_t**, align 8
store volatile %jl_value_t** %1, %jl_value_t*** %3, align 8
%4 = load %jl_value_t*, %jl_value_t** %1, align 8
ret %jl_value_t* %4
}
julia> @code_llvm copy(a)
define %jl_value_t* @julia_copy_73507(%jl_value_t*) #0 {
top:
%1 = call %jl_value_t* inttoptr (i64 4478340144 to %jl_value_t* (%jl_value_t*)*)(%jl_value_t* %0)
ret %jl_value_t* %1
}
@code_llvm collect(a)
將返回一串代碼。我不熟悉LLVM,所以我不能說更多。
3
copy是正確的!
help?> copy
search: copy copy! copysign deepcopy unsafe_copy! cospi complex Complex Complex64 Complex32 Complex128 CompositeException
copy(x)
Create a shallow copy of x: the outer structure is copied, but not all internal values. For example, copying an array
produces a new array with identically-same elements as the original.
相關問題
- 1. 應元數據收集在mognoose引用或應該主要收集內部
- 2. 我應該使用簡單的foreach或Linq從集合中收集數據時
- 3. 使用Repa陣列時,我應該在哪裏使用'computeS'(或'computeP')函數?
- 4. PHP陣列收集
- 5. 在Julia中連接陣列
- 6. 陣列操作使用地圖或收集紅寶石
- 7. 我應該使用&&或||
- 8. 應該我在MongoDB中選擇,創建新的集合或嵌入收集
- 9. 添加陣列收集VBA
- 10. 從每個子矩陣或單元陣列收集特定行
- 11. Julia的作物陣列
- 12. 我應該在調用Bitmap.recycle()後信任垃圾收集器嗎?
- 13. 我應該使用data.frame還是矩陣?
- 14. 我應該在C++中使用矩陣[] [max]還是**矩陣?
- 15. 我們應該或不應該在模型中使用參數?
- 16. 表或列表:我應該在這裏使用什麼?
- 17. 我的陣列設計應該如何?
- 18. Android集合,我應該使用哪些?
- 19. 我應該使用哪個集合
- 20. 我應該使用什麼Java集合?
- 21. 我應該使用哪種類型的陣列
- 22. 我應該使用什麼陣列複製方法?
- 23. 我應該首先收集文件,然後執行任務,或者我應該在收集時執行任務嗎?)
- 24. 我應該使用的用戶或用戶的集合在某一類inMVC4
- 25. 如果我正在收集該集合的單個項目,那麼集合響應的href應該是什麼?
- 26. Julia只使用我CPU的20-30%。我該怎麼辦?
- 27. 我應該在聲明上實例化收集字段嗎?
- 28. 我應該使用鎖或ToList()
- 29. therubyracer或nodejs,我應該使用?
- 30. 我應該使用導航或ul
可能類似於http://stackoverflow.com/questions/35115414/copy-or-clone-a-collection-in-julia –
是的,這是類似的,但沒有解決的優點/缺點'copy' wrt'collect'和'Array',用於數組的特定情況。 – eguaio