运行这段代码。报错’ Unable to allocate 28.9 TiB for an array with shape (1866, 4259567003) and data type float32‘,如何解决:“smiles = data['SMILES'] fps = [] for smi in smiles: mol = Chem.MolFromSmiles(smi) fp = AllChem.GetMorganFingerprint(mol, 2) fps.append(fp.GetNonzeroElements()) fps_array = np.zeros((len(fps), max(max(fp.keys()) for fp in fps) + 1), dtype=np.float32) for i, fp in enumerate(fps): for key, value in fp.items(): fps_array[i][key] = value fps_df = pd.DataFrame(fps_array, columns=[f'Fingerprint_{i+1}' for i in range(fps_array.shape[1])])”
时间: 2024-04-22 11:28:20 浏览: 45
这个错误提示表明您尝试分配的内存空间超过了系统的可用内存限制。根据您提供的代码,生成的指纹矩阵大小为 (1866, 4259567003),这是一个非常大的矩阵,所以导致了内存不足的问题。
为了解决这个问题,您可以考虑以下几种方法:
1. 减小指纹矩阵的大小:您可以尝试减小分子指纹的维度或减少分子样本的数量,以减小生成的指纹矩阵的大小。
2. 使用稀疏矩阵表示:考虑到分子指纹通常是稀疏的,您可以使用稀疏矩阵来表示指纹矩阵,以节省内存空间。您可以使用SciPy库中的`scipy.sparse`模块来实现稀疏矩阵。
3. 分批处理:如果内存限制无法容纳整个指纹矩阵,您可以考虑将数据分批处理,逐批生成和处理分子指纹。
以下是一个示例代码,演示如何使用稀疏矩阵来表示分子指纹:
```python
from scipy.sparse import csr_matrix
smiles = data['SMILES']
fps = []
max_key = 0
for smi in smiles:
mol = Chem.MolFromSmiles(smi)
fp = AllChem.GetMorganFingerprint(mol, 2)
fps.append(fp.GetNonzeroElements())
max_key = max(max_key, max(fp.keys()))
fps_array = csr_matrix((len(fps), max_key + 1), dtype=np.float32)
for i, fp in enumerate(fps):
for key, value in fp.items():
fps_array[i, key] = value
fps_df = pd.DataFrame(fps_array.toarray(), columns=[f'Fingerprint_{i+1}' for i in range(fps_array.shape[1])])
```
在这个示例中,我使用了`scipy.sparse.csr_matrix`来创建稀疏矩阵,并在每个非零元素的位置上设置对应的值。
请注意,这些解决方案中的每一种都有其适用的场景和限制。您需要根据具体的需求和资源限制选择合适的方法。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)