在numpy中,如果你想计算矩阵(elemise)的每个条目的正弦,那么
a = numpy.arange(0,27,3).reshape(3,3)
numpy.sin(a)
会完成任务的!如果你想要功率,让我们说每个条目的2
a**2
但如果你有一个稀疏矩阵,事情似乎更困难。至少除了迭代lil_matrix格式的每个条目并对其进行操作之外,我还没有找到实现这一点的方法
我在SO上发现了这个问题,并试图调整这个答案,但我没有成功。
目标是从元素上计算CSR格式的scipy.sparse矩阵的平方根(或1/2的幂)。
你有什么建议?
以下技巧适用于将零映射到零的任何操作,并且仅适用于这些操作,因为它只涉及非零元素。即,它将适用于sin
和sqrt
,但不适用于cos
。
设X
是某种CSR矩阵。。。
>>> from scipy.sparse import csr_matrix
>>> X = csr_matrix(np.arange(10).reshape(2, 5), dtype=np.float)
>>> X.A
array([[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.]])
非零元素的值为X.data
:
>>> X.data
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9.])
您可以就地更新:
>>> X.data[:] = np.sqrt(X.data)
>>> X.A
array([[ 0. , 1. , 1.41421356, 1.73205081, 2. ],
[ 2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]])
更新在最近版本的SciPy中,您可以执行类似X.sqrt()
的操作,其中X
是一个稀疏矩阵,以获得具有X
中元素平方根的新副本。