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

时间:2015-12-19 22:41:24

标签: python numpy julia

在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')

3 个答案:

答案 0 :(得分:4)

看看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

答案 1 :(得分:2)

使用-i.bakChar

Int

更完整的答案:

Char(120) # = 'x'
Int('x') # = 120

ints = [65, 84, 67]
chars = map(Char, ints)

请注意,Julia中的字符和字符串类型不同,请参阅http://docs.julialang.org/en/latest/manual/strings/#characters

编辑: 您还可以使用构造函数chars = ['A', 'T', 'C'] ints = map(Int, chars) Char

Int

答案 2 :(得分:1)

要进行更快速的转换,您可以使用ASCIIStringUInt8数组。 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)

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