再次对 Numpy 数组进行就地类型转换?

Posted

技术标签:

【中文标题】再次对 Numpy 数组进行就地类型转换?【英文标题】:In-place type conversion of a Numpy array again? 【发布时间】:2014-02-24 14:04:46 【问题描述】:

我有一个 floats 数组,我想将其转换为 int

a1 = np.ones(10)
a2 = a1.astype(int, copy=False)
a2.dtype # int
a1.dtype # float

这里发生了什么?我以为astype(int, copy=False) 会就地转换类型。但它似乎没有这样做?

相关问题:In-place type conversion of a NumPy array

【问题讨论】:

我认为这可能是由于纯 python intnp.float64 之间的大小差异,但我尝试使用 np.int64 但它也不起作用。 从这里开始阅读:github.com/numpy/numpy/blob/master/numpy/core/src/multiarray/… 【参考方案1】:

来自copy argument documentation:

如果设置为 false,以及 dtype、order 和 subok 要求 满足,则返回输入数组而不是副本。

它实际上不能就地转换类型。它仅在输入数组已经是您想要的 dtype 时才有效;否则,无论如何它都必须制作副本。

【讨论】:

我认为这似乎是正确的,但是astype 可以改变什么,如果不是dtype @wim:只有当原始数组看起来完全符合您的要求时,它才能避免创建新数组。在创建新数组时,它可以更改 dtype、内存顺序和特定的数组子类。 如果您有一个未知类型的数组对象并且您必须将其转换为特定对象,这只是一种避免不必要复制的方法。这可能不是使用 Python 中的 numpy 经常需要的,无论类型如何,您都可以获得相同的操作,但在 numpy 的 C 内部,您会看到它一直都在完成。

以上是关于再次对 Numpy 数组进行就地类型转换?的主要内容,如果未能解决你的问题,请参考以下文章

“ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型 numpy.ndarray)。在 TensorFlow CNN 中进行图像分类

C# 就地将 `int[]` 数组转换为 `byte[]` 数组

通过重新解释原始字节从一种类型的 numpy 数组转换为另一种类型

使用NumPy库的函数astype()对ndarray的数据类型进行转换

mindspore的tensor与numpy数据类型转换问题?

《利用Python进行数据分析》第4章学习笔记