更改矩阵中一个元素的数据类型

2024-06-26 13:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望实现一个大型矩阵列表的硬件高效乘法(大约200000 x 200000)。这些矩阵非常接近于单位矩阵,但有些元素变为无理数

为了减少内存占用并加快计算速度,我希望将标识的0和1存储为单字节,如下所示

import numpy as np
size = 200000
large_matrix = np.identity(size, dtype=uint8)

只需将一些元素更改为不同的数据类型

import sympy as sp

# sympy object
irr1 = sp.sqrt(2)    

# float
irr2 = e               

large_matrix[123456, 100456] = irr1
large_matirx[100456, 123456] = irr2

是否可以仅保存具有不同数据类型的矩阵的这些元素,而所有其他元素仍然是字节?我不想因为我需要一个元素作为浮点,就必须把所有的东西都改成浮点

-----编辑------

如果在numpy中不可能,那么在没有numpy的情况下如何找到解决方案


Tags: importnumpy元素sizeasnp矩阵matrix
2条回答

根据定义,NumPy数组只有一个数据类型。您可以在NumPy文档中看到:

A numpy array is homogeneous, and contains elements described by a dtype object. A dtype object can be constructed from different combinations of fundamental numeric types.

进一步阅读:https://docs.scipy.org/doc/numpy/reference/generated/numpy.dtype.html

也许你可以看一看SciPy的Coordinate-based sparse matrix。在这种情况下,SciPy将创建一个稀疏矩阵(针对如此大的空矩阵进行了优化),并使用其坐标格式,您可以根据需要访问和修改数据

根据其文件:

>>> from scipy.sparse import coo_matrix
>>> # Constructing a matrix using ijv format
>>> row  = np.array([0, 3, 1, 0])
>>> col  = np.array([0, 3, 1, 2])
>>> data = np.array([4, 5, 7, 9])
>>> m = coo_matrix((data, (row, col)), shape=(4, 4))
>>> m.toarray()
array([[4, 0, 9, 0],
       [0, 7, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 5]])

它不创建矩阵,而是创建一组带有值的坐标,这比仅用零填充矩阵占用的空间要小得多

>>> from sys import getsizeof
>>> getsizeof(m)
56
>>> getsizeof(m.toarray())
176

相关问题 更多 >