我尝试在Scipy中使用稀疏矩阵计算序列相关性,得到一个错误,我的数组没有相同的维度,但它们看起来是相同的。示例代码:
import numpy
import scipy.signal as signal
import scipy.sparse as sparse
my_sparse = sparse.csr_array(numpy.random.rand(10))
print(my_sparse)
print(my_sparse.shape)
my_dense = numpy.expand_dims(numpy.random.rand(10), 1).T
print(my_dense)
print(my_dense.shape)
corr = signal.correlate(my_sparse, my_dense, method="direct", mode="full")
print(corr)
print(corr.shape)
字符串
产出:
$ python test_sparse_with_correlate.py
(0, 0) 0.9842628978990572
(0, 1) 0.21288927130505086
(0, 2) 0.11321754428562536
(0, 3) 0.02907902961562403
(0, 4) 0.06534326022150638
(0, 5) 0.5611332833785263
(0, 6) 0.6693945587792903
(0, 7) 0.6421603953803423
(0, 8) 0.7299602339571223
(0, 9) 0.5241172106721759
(1, 10)
[[0.5422929 0.27431614 0.65966523 0.05579376 0.41876797 0.46535913
0.13079666 0.97518169 0.49505634 0.68287069]]
(1, 10)
Traceback (most recent call last):
File "/mnt/alt_wkdir/118_serial_correlation/code/test_sparse_with_correlate.py", line 13, in <module>
corr = signal.correlate(my_sparse, my_dense, method="direct", mode="full")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/mnt/bioinf_tools/miniconda3/envs/scipy/lib/python3.12/site-packages/scipy/signal/_signaltools.py", line 231, in correlate
raise ValueError("in1 and in2 should have the same dimensionality")
ValueError: in1 and in2 should have the same dimensionality
型
我也尝试过用数组的转置版本(所以它们的形状都是(10,1)),结果是相同的ValueError。
我使用的是scipy的v1.11.4,我首先发现了旧版本的问题,用最新的稳定版scipy创建了一个新的conda环境,看到了同样的行为。
是否可以将scipy.sparse与scipy.signal.correlate一起使用,如果可以,您能告诉我如何使用吗?
1条答案
按热度按时间tzcvj98z1#
创建密集和稀疏(1,10)数组:
字符串
正如我在评论中提到的,你的
correlate
试图将其参数转换为密集数组。对于稀疏数组,结果是:型
这只是将稀疏对象 Package 在0d个对象dtype数组中:
型
所以很明显维度不同。
我认为稀疏文档警告说,在通用的numpy代码中使用稀疏矩阵通常不起作用。
numpy
不知道sparse
。制作密集数组的正确方法是使用矩阵自己的方法:
型