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

Python 在Julia中,将int数组转换为字符数组,反之亦然,python,numpy,julia,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'], dty

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

使用
Char
Int

Char(120) # = 'x'
Int('x') # = 120
Char[65, 84, 67]
Int['A', 'T', 'C']
更完整的答案是:

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

请注意,Julia中的字符和字符串类型不同,请参见

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

Char(120) # = 'x'
Int('x') # = 120
Char[65, 84, 67]
Int['A', 'T', 'C']

使用
Char
Int

Char(120) # = 'x'
Int('x') # = 120
Char[65, 84, 67]
Int['A', 'T', 'C']
更完整的答案是:

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

请注意,Julia中的字符和字符串类型不同,请参见

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

Char(120) # = 'x'
Int('x') # = 120
Char[65, 84, 67]
Int['A', 'T', 'C']
看看:

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

julia> a[1] = 'Z'
'Z'
b
也会更改:

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

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

julia> a[1] = 'Z'
'Z'
b
也会更改:

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

要实现更即时的转换,可以使用
ASCIIString
s和
UInt8
数组
Char
s占用四个字节的内存,不使用紧凑的单字节表示法。守则如下:

# 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)

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

要进行更瞬时的转换,可以使用
ascistring
s和
UInt8
数组
Char
s占用四个字节的内存,不使用紧凑的单字节表示法。守则如下:

# 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)

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

对于numpy 1.10.2,
np.array([“A”、“T”、“C]”)。view(np.int32)
给出了
ValueError:新类型与数组不兼容。
但是
np.array([“A”、“T”、“C]”)。view(np.uint8)
works。您使用的是Python 3吗?啊,很好。我使用了python 2.7。对于Python3,您的示例是有效的。对于NUMPY1.10.2,
np.array([“A”,“T”,“C”])。view(np.int32)
给出了
ValueError:新类型与数组不兼容。
但是
np.array([“A”,“T”,“C”])。view(np uint8)
有效。您在使用Python3吗?啊,很好。我使用了python 2.7。在Python3中,您的示例是有效的。有比map更快的方法吗?numpy操作已经到位,即使对于非常大的阵列,它也基本上是瞬时的。我想你可以在阵列上循环,通常在Julia中循环速度很快。您也可以使用构造函数
Char[65,84,67]
Int['A','T','C']
来实现更到位的方法,但我不确定这是否会更快。@Higany或使用
map取而代之。有比地图更快的方法吗?numpy操作已经到位,即使对于非常大的阵列,它也基本上是瞬时的。我想你可以在阵列上循环,通常在Julia中循环速度很快。您也可以使用构造函数
Char[65,84,67]
Int['A','T','C']
来实现更到位的方法,但我不确定这是否会更快。@Higany或使用
map是不可变的。字符串是不可变的,这可能会使修改复杂化(您始终可以深入内部
数据
字段),但对于操作和读取仍然很有用。字符串是不可变的,这可能会使修改复杂化(您始终可以深入内部
数据
字段),但对于操纵和阅读仍然有用。