You need to use the default value of allow_pickle to save an array object. This is a big issue with numpy save. I think if you use the HIGHEST_PROTOCOL, which is 4, of pickle, you can save a larger CSR matrix, however, there is no option to specify the protocol in numpy save. h5py, which can handle very large data, does not support CSR matrix. So, I would recommend to try pickle.dump() to save your CSR matrix and pickle.load() to load your saved file. If you used python 3 to save your data using pickle.dump(), you might not be able to process that data using python 2 (I have not tested it). Look at this example to understand how to use pickle.
>>> X
<7x5 sparse matrix of type '<class 'numpy.int8'>'
with 13 stored elements in Compressed Sparse Row format>
>>> import pickle
To save
>>> with open('save_csr_data.dat', 'wb') as outfile:
... pickle.dump(X, outfile, pickle.HIGHEST_PROTOCOL)
...
To read
>>> with open('save_csr_data.dat', 'rb') as infile:
... x1 = pickle.load(infile)
...
>>> x1
<7x5 sparse matrix of type '<class 'numpy.int8'>'
with 13 stored elements in Compressed Sparse Row format>