在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')
答案 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
这使a
和b
查看相同的内存,就像一个numpy“视图”。例如,如果我更改a
的元素:
julia> a[1] = 'Z'
'Z'
b
也发生了变化:
julia> b
1x3 Array{Int32,2}:
90 84 67
答案 1 :(得分:2)
使用-i.bak
和Char
:
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)
要进行更快速的转换,您可以使用ASCIIString
和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)
在这两种情况下,相同的内存都支持这两个变量,这意味着操作是"瞬时"但改变一个变量会改变另一个变量。