Julia中的条件赋值

Julia中的条件赋值,julia,Julia,在R中,我可以有条件地指定如下值: A = matrix(c(1,2,3,4), ncol = 2) A = 1 3 2 4 A[,1][A[,2] == 3] = 1000 A = 1000 3 2 4 在Julia中,同样的格式不起作用 A = [1 3; 2 4] A = 1 3 2 4 A[:,1][A[:,2] .== 3] = 1000 A = 1 3 2 4 我似乎不知道发生了什么事。有人能帮忙吗 编辑:谢谢。这适用于将一个值替换为另一个值,如用

在R中,我可以有条件地指定如下值:

A = matrix(c(1,2,3,4), ncol = 2)
A = 
1  3
2  4

A[,1][A[,2] == 3] = 1000

A =
1000  3
   2  4
在Julia中,同样的格式不起作用

A = [1 3; 2 4]
A =
1  3
2  4

A[:,1][A[:,2] .== 3] = 1000

A =
1  3
2  4
我似乎不知道发生了什么事。有人能帮忙吗

编辑:谢谢。这适用于将一个值替换为另一个值,如用1000替换1。但它不会取代多个。为什么呢

>A = [1 3 5; 2 4 6]
>A
1  3  5
2  4  6

>A1 = sub(A, :, 1)
>A1
1
2

>A2 = sub(A, :, 2)
>A2
3
4

>A1[A2 .> 2] = 1000
1000

>A
1000   3   5
   2   4   6

为什么替换在第一个实例中停止,而不继续到第二个实例?

正如链接文章中提到的,范围索引生成副本。可以使用
子阵列

julia> A = [1 3 5; 2 4 6]
2x3 Array{Int64,2}:
 1  3  5
 2  4  6

julia> A1 = sub(A, :, 1)
2-element SubArray{Int64,1,Array{Int64,2},Tuple{Colon,Int64},2}:
 1
 2

julia> A2 = sub(A, :, 2)
2-element SubArray{Int64,1,Array{Int64,2},Tuple{Colon,Int64},2}:
 3
 4

julia> A1[A2 .== 3] = 1000
1000

julia> A
2x3 Array{Int64,2}:
 1000  3  5
    2  4  6
或者对循环使用

julia> for i = 1:size(A,1)
       A[i,2] == 3 && (A[i,1]=1000)
       end
编辑:你看到的奇怪行为似乎在某个时候得到了纠正。下面是我从最新的git master上得到的信息

julia> versioninfo()
Julia Version 0.4.0-dev+4743
Commit dc088f7 (2015-05-08 13:29 UTC)
Platform Info:
  System: Linux (x86_64-redhat-linux)
  CPU: Intel(R) Xeon(R) CPU E5-2630 v2 @ 2.60GHz
  WORD_SIZE: 64
  BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Sandybridge)
  LAPACK: libopenblas
  LIBM: libopenlibm
  LLVM: libLLVM-3.3

julia> A = [1 3 5; 2 4 6]
2x3 Array{Int64,2}:
 1  3  5
 2  4  6

julia> A1 = sub(A, :, 1)
2-element SubArray{Int64,1,Array{Int64,2},Tuple{Colon,Int64},2}:
 1
 2

julia> A2 = sub(A, :, 2)
2-element SubArray{Int64,1,Array{Int64,2},Tuple{Colon,Int64},2}:
 3
 4

julia> A2 .> 2
2-element BitArray{1}:
 true
 true

julia> A1[A2 .> 2]
2-element Array{Int64,1}:
 1
 2

julia> A1[A2 .> 2] = 1000
1000

julia> A1
2-element SubArray{Int64,1,Array{Int64,2},Tuple{Colon,Int64},2}:
 1000
 1000

julia> A
2x3 Array{Int64,2}:
 1000  3  5
 1000  4  6
一般来说,
for
循环版本比这样做更快

可能重复的