将Numpy数组的单个元素转换为另一种类型

时间:2018-02-27 15:44:52

标签: python arrays python-3.x numpy

我有一个数据类型为float64的Numpy数组。例如:     [1.35623 , 2.35124 , 5.12276, 0.12466]。如何更改此数组的单个元素的数据类型。我尝试过使用astype(),但它似乎返回一个标量数而不是一个numpy数组。我怎么能在Python 3.x中这样做?

1 个答案:

答案 0 :(得分:0)

您只能通过创建object数组来获得此近似值,类似于保存对异构类型对象的引用的C指针数组。它不会改变数组本身包含相同类型元素的事实。

然而,这并不是特别有效,而且与首先使用numpy.ndarray的目标相反。

如果您愿意,您仍然可以这样做:

In [1]: import numpy

In [2]: a = numpy.array([1.35623 , 2.35124 , 5.12276, 0.12466])

In [3]: a.dtype
Out[3]: dtype('float64')

In [4]: b = numpy.array(a, dtype=object)

In [5]: b
Out[5]: array([1.35623, 2.35124, 5.12276, 0.12466], dtype=object)

In [6]: b[0] = 1.0j

In [7]: b
Out[7]: array([1j, 2.35124, 5.12276, 0.12466], dtype=object)

然而,矢量化式计算(例如使用numpy的重载运算符和ufunc s)将无法从保存数值类型对象的locality连续数组中受益。实际的数字对象可能稀疏地位于内存中,使得访问和计算效率低下。此外,一些ufunc可能会破坏。