在Julia中,将int数组转换为字符数组,反之亦然



在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

这使得ab查看相同的内存,就像一个numpy"视图"。例如,如果我更改a:的元素

julia> a[1] = 'Z'
'Z'

b也被更改:

julia> b
1x3 Array{Int32,2}:
 90  84  67

使用CharInt:

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

编辑:您还可以使用构造函数CharInt:

Char[65, 84, 67]
Int['A', 'T', 'C']

对于更即时的转换,可以使用ASCIIStrings和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)

在这两种情况下,相同的内存支持两个变量,这意味着操作是"即时的",但更改一个变量会更改另一个。

最新更新