Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
246 views
in Technique[技术] by (71.8m points)

python - Creating DOK matrix in scipy

I have numpy arrays I need to convert to DOK format. Why does this work:

x = np.asarray([1, 0, 0])
y = scipy.sparse.dok_matrix(scipy.sparse.csr_matrix(x))

But this doesn't:

x = np.asarray([1, 0, 0])
y = scipy.sparse.dok_matrix(x)

which throws the error: "TypeError: Expected rank <=2 dense array or matrix."

I don't find anything in Scipy's docs that suggest I shouldn't be able to convert an array to a dok matrix directly.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

csr_matrix accepts a 1-d array because it (eventually) passes the array argument through numpy.atleast_2d. dok_matrix doesn't do that--it requires a 2-d array. (I don't know why the behavior is different.)

To work around this, convert your 1-d input to 2-d before passing it to dok_matrix. E.g.

y = scipy.sparse.dok_matrix(np.atleast_2d(x))

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...