array.tolist
时间: 2023-09-02 09:07:45 浏览: 47
`array.tolist()` 是一个 `numpy` 数组对象的方法,用于将该数组转换为 Python 原生的列表对象,并返回该列表。该方法的作用是将 `numpy` 数组转换为 Python 中常用的列表数据结构,便于进行一些常规的操作,例如遍历、切片、连接等。
以下是一个简单的示例:
```python
import numpy as np
# 创建一个 2x3 的 numpy 数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 将该数组转换为列表
lst = arr.tolist()
# 打印列表
print(lst)
```
输出结果:
```
[[1, 2, 3], [4, 5, 6]]
```
可以看到,`arr.tolist()` 方法返回了一个包含两个子列表的列表对象,这两个子列表分别代表 `numpy` 数组的两行数据。需要注意的是,列表对象中的元素类型与 `numpy` 数组中的元素类型相同,例如上述示例中的列表中的元素都是整型。
需要注意的是,将 `numpy` 数组转换为列表会导致数据类型的转换,因此可能会损失一些精度。如果需要保持数据的精度,应该尽可能地在 `numpy` 数组中进行操作。
相关问题
np.array.tolist()
`np.array.tolist()` 是 numpy 库中的一个方法,用于将 numpy 数组转换为 Python 列表。它的作用是将一个 numpy 数组转换为一个 Python 列表,便于对数据的处理和分析。
使用方法如下:
```python
import numpy as np
# 创建一个 numpy 数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 将 numpy 数组转换为 Python 列表
lst = arr.tolist()
print(lst) # [[1, 2, 3], [4, 5, 6]]
```
在上述代码中,首先导入了 numpy 库,然后创建了一个 numpy 数组 `arr`,接着使用 `arr.tolist()` 将其转换为 Python 列表 `lst`,最后打印输出 Python 列表 `lst`。
以下代码运行后得到的data['Fingerprint']使用data.info()查看还是object而非float64,这是为什么呢?到底该如何解决 smiles = data['SMILES'] # 创建一个空的列表来存储分子指纹 fps = [] # 遍历每个SMILES,计算Morgan指纹并添加到列表中 for smi in smiles: mol = Chem.MolFromSmiles(smi) fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2) # 这里使用默认的Morgan指纹参数 fps.append(fp.ToBitString())# 将分子指纹转换为数值数组 fps_array = np.array([list(fp) for fp in fps], dtype=int)# 将分子指纹加入数据集 data['Fingerprint'] = fps_array.tolist()
问题出在最后一行代码`data['Fingerprint'] = fps_array.tolist()`上。在这行代码中,你将`fps_array`转换为列表并赋值给了`data['Fingerprint']`,因此`data['Fingerprint']`的数据类型变为了object而非float64。
要解决这个问题,你可以使用`pd.Series()`函数来创建一个新的Series对象,并将其赋值给`data['Fingerprint']`,而无需将`fps_array`转换为列表。这样可以保持数据类型为float64。
以下是修正后的代码:
```python
import pandas as pd
import numpy as np
from rdkit import Chem
from rdkit.Chem import AllChem
smiles = data['SMILES']
fps = []
for smi in smiles:
mol = Chem.MolFromSmiles(smi)
fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2)
fps.append(fp.ToBitString())
fps_array = np.array([list(fp) for fp in fps], dtype=int)
data['Fingerprint'] = pd.Series(fps_array.tolist(), dtype=np.float64)
```
在这个修正后的代码中,我们使用`pd.Series()`函数来创建一个新的Series对象,并将其赋值给`data['Fingerprint']`。由于我们指定了数据类型为np.float64,因此`data['Fingerprint']`的数据类型将保持为float64。
请注意,你需要先导入pandas库,并确保你的数据集使用了正确的列名。