我认为对您的特定问题最好的答案是使用矩阵类型的对象。在
考虑到矩阵的大部分都是由零填充的,因此稀疏矩阵应该是以内存友好的方式存储这些大容量矩阵的最有效的方法。这应该优于直接使用numpy数组,特别是对于两个维度的非常大的矩阵,如果不是在计算速度方面,在内存方面。在import numpy as np
import scipy #older versions may require `import scipy.sparse`
matrix = np.matrix(np.random.randn(10, 5))
maxes = matrix.argmax(axis=1).A1
# was .A[:,0], slightly faster, but .A1 seems more readable
n_rows = len(matrix) # could do matrix.shape[0], but that's slower
data = np.ones(n_rows)
row = np.arange(n_rows)
sparse_matrix = scipy.sparse.coo_matrix((data, (row, maxes)),
shape=matrix.shape,
dtype=np.int8)
相对于常规矩阵对象,这个稀疏矩阵对象应该是非常轻量级的,这将不必要地跟踪其中的每个零。将其具体化为标准矩阵:
^{pr2}$
退货:matrix([[0, 0, 0, 0, 1],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 1],