我有一个填充了一些值的数组。运行此代码后:
array = zeros(10)
for i in 1:10
array[i] = 2*i + 3
end
数组看起来像:
10-element Array{Float64,1}:
5.0
7.0
9.0
11.0
13.0
15.0
17.0
19.0
21.0
23.0
我想通过删除第三个值来获取以下数组:
9-element Array{Float64,1}:
5.0
7.0
11.0
13.0
15.0
17.0
19.0
21.0
23.0
怎么做?
修改
如果我有一个数组(而不是矢量),就像这里:
a = [1 2 3 4 5]
1×5 Array{Int64,2}:
1 2 3 4 5
提议的deleteat!
无效:
a = deleteat!([1 2 3 4 5], 1)
ERROR: MethodError: no method matching deleteat!(::Array{Int64,2}, ::Int64)
You might have used a 2d row vector where a 1d column vector was required.
Note the difference between 1d column vector [1,2,3] and 2d row vector [1 2 3].
You can convert to a column vector with the vec() function.
Closest candidates are:
deleteat!(::Array{T,1} where T, ::Integer) at array.jl:875
deleteat!(::Array{T,1} where T, ::Any) at array.jl:913
deleteat!(::BitArray{1}, ::Integer) at bitarray.jl:961
我不想要列矢量。我想要:
1×4 Array{Int64,2}:
2 3 4 5
有可能吗?
答案 0 :(得分:3)
为了清楚说明:Julia中的Vector{T}
只是Array{T, 1}
的同义词,除非您正在谈论其他内容......我们会调用所有排名数组的Array
个。
但这似乎是一个Matlab继承的误解。在Julia中,您通过在文字中使用空格来构造Matrix{T}
,即Array{T, 2}
:
julia> a = [1 2 3 4 5]
1×5 Array{Int64,2}:
1 2 3 4 5
从矩阵中删除一般没有意义,因为你不能在矩形布局中轻松“修复形状”。
可以使用逗号编写Vector
或Array{T, 1}
:
julia> a = [1, 2, 3, 4, 5]
5-element Array{Int64,1}:
1
2
3
4
5
就此而言,deleteat!
有效:
julia> deleteat!(a, 1)
4-element Array{Int64,1}:
2
3
4
5
为了完整性,还有第三个变体RowVector
,它是换位的结果:
julia> a'
1×4 RowVector{Int64,Array{Int64,1}}:
2 3 4 5
从此你也无法删除。
答案 1 :(得分:1)
Deleteat!仅定义为:
完全实施:
Vector (a.k.a. 1-dimensional Array)
BitVector (a.k.a. 1-dimensional BitArray)
行向量(2维度)无法正常工作。 但是......这个技巧有一个解决方法:
julia> deleteat!(a[1,:], 1)' # mind the ' -> transposes it back to a row vector.
1×4 RowVector{Int64,Array{Int64,1}}:
2 3 4 5
当然,对于包含2行或更多行的数组,这不起作用。