在Python/NumPy中,我可以很容易地将int数组转换为字符数组。我怎么能在茱莉亚身上做到这一点?
例如在Python中:
In [6]: np.array(["A", "T", "C"]).view(np.int32)
Out[6]: array([65, 84, 67], dtype=int32)
反之亦然
In [15]: np.array([65, 84, 67]).view("S8")
Out[15]:
array([b'A', b'T', b'C'],
dtype='|S8')
看看reinterpret
:
julia> a = ['A' 'T' 'C']
1x3 Array{Char,2}:
'A' 'T' 'C'
julia> b = reinterpret(Int32, a)
1x3 Array{Int32,2}:
65 84 67
这使得a
和b
查看相同的内存,就像一个numpy"视图"。例如,如果我更改a
:的元素
julia> a[1] = 'Z'
'Z'
b
也被更改:
julia> b
1x3 Array{Int32,2}:
90 84 67
使用Char
和Int
:
Char(120) # = 'x'
Int('x') # = 120
更完整的答案:
ints = [65, 84, 67]
chars = map(Char, ints)
和
chars = ['A', 'T', 'C']
ints = map(Int, chars)
请注意,Julia中的字符和字符串类型不同,请参见http://docs.julialang.org/en/latest/manual/strings/#characters
编辑:您还可以使用构造函数Char
和Int
:
Char[65, 84, 67]
Int['A', 'T', 'C']
对于更即时的转换,可以使用ASCIIString
s和UInt8
数组。Char
占用四个字节的内存,并且不使用紧凑的单字节表示。代码为:
# chars in s1 to ints in v1
s1 = ASCIIString("ATC")
v1 = s.data
# ints in v2 to chars in s2
v2 = UInt8[65,66,67]
s2 = ASCIIString(v)
在这两种情况下,相同的内存支持两个变量,这意味着操作是"即时的",但更改一个变量会更改另一个。