python save numpy数组,仅包含非零元素
我有一个数组,其中大多数元素为零python save numpy数组,仅包含非零元素,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我有一个数组,其中大多数元素为零 A = [ 1,0,2 2,3,0 0,0,4 ] 我想把这个保存为 rowid[0] colid[0] 1 rowid[0] colid[2] 2 rowid[1] colid[0] 2 rowid[1] colid[1] 3 rowid[2] colid[2] 4 这里rowid和colid是数组,它们将数组索引映射到原始文件中的实际条目 我如何在不使用for循环的情况下执行此操作 有一个scipy.sparse包可以处理这
A = [ 1,0,2
2,3,0
0,0,4 ]
我想把这个保存为
rowid[0] colid[0] 1
rowid[0] colid[2] 2
rowid[1] colid[0] 2
rowid[1] colid[1] 3
rowid[2] colid[2] 4
这里rowid和colid是数组,它们将数组索引映射到原始文件中的实际条目
我如何在不使用for循环的情况下执行此操作 有一个scipy.sparse包可以处理这样的矩阵。@hpaulj,我正在寻找一种在明文文件中以指定格式编写这样一个数组的方法,它应该可以轻松地通过
argwhere
。使用您自己的行格式。是否希望您的输出具有字符串“rowid[0]”
等?想想看,savetxt
可以使用更奇特的格式,例如fmt='row[%d]col[%d]%d'
可能需要savetxt
中的头
值来存储数组的原始形状,这样,如果数组非常稀疏,就可以正确地重建它。并且设置分隔符=',“
如果你想要一个合适的*.csv
修正了一些格式,并在原始答案中添加了分隔符=”,“
A = np.array(A).reshape(3, 3) # make A a 3x3 numpy array
i, j = np.where(A != 0) # find indices where it is nonzero
v = A[i, j] # extract nonzero values of the array
np.savetxt('file.csv', np.vstack((i, j, v)).T, delimiter = ',') # stack and save
# @Daniel F suggestion is to make header with array shape and add delimiter kwarg
np.savetxt('file.csv', np.vstack((i, j, v)).T, delimiter = ',', header = str(A.shape))