稀疏矩阵的逐元素绝对值
Element-wise absolute value of a sparse matrix
如何获取稀疏复矩阵的元素绝对值?一般来说,是否可以使用用户定义的函数将一个矩阵映射到另一个矩阵?
对我来说,下面的方法很管用
import numpy as np
from scipy import sparse
a = sparse.identity(5).tocsr() * 1j
a[2,4] = 1-1j
b = np.absolute(a)
b.A
# array([[ 1. , 0. , 0. , 0. , 0. ],
# [ 0. , 1. , 0. , 0. , 0. ],
# [ 0. , 0. , 1. , 0. , 1.41421356],
# [ 0. , 0. , 0. , 1. , 0. ],
# [ 0. , 0. , 0. , 0. , 1. ]])
# general functions: use the data attribute to access nonzeros
b.data = np.exp(b.data)
b.A
# array([[ 2.71828183, 0. , 0. , 0. , 0. ],
# [ 0. , 2.71828183, 0. , 0. , 0. ],
# [ 0. , 0. , 2.71828183, 0. , 4.11325038],
# [ 0. , 0. , 0. , 2.71828183, 0. ],
# [ 0. , 0. , 0. , 0. , 2.71828183]])
scipy 中的稀疏矩阵对象实现了方法 __abs__()
。这意味着您可以使用 Python 的 内置 abs()
函数。它会将调用分派给 __abs__()
方法。例如,
In [16]: from scipy.sparse import csr_matrix
In [17]: a = csr_matrix([[1+1j, 0, 0, 0], [0, -2, 0, 0], [0, 0, 0, 0], [3-4j, 0, -5j, 0]])
In [18]: a.A
Out[18]:
array([[ 1.+1.j, 0.+0.j, 0.+0.j, 0.+0.j],
[ 0.+0.j, -2.+0.j, 0.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
[ 3.-4.j, 0.+0.j, 0.-5.j, 0.+0.j]])
In [19]: b = abs(a)
In [20]: b.A
Out[20]:
array([[ 1.41421356, 0. , 0. , 0. ],
[ 0. , 2. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ],
[ 5. , 0. , 5. , 0. ]])
如何获取稀疏复矩阵的元素绝对值?一般来说,是否可以使用用户定义的函数将一个矩阵映射到另一个矩阵?
对我来说,下面的方法很管用
import numpy as np
from scipy import sparse
a = sparse.identity(5).tocsr() * 1j
a[2,4] = 1-1j
b = np.absolute(a)
b.A
# array([[ 1. , 0. , 0. , 0. , 0. ],
# [ 0. , 1. , 0. , 0. , 0. ],
# [ 0. , 0. , 1. , 0. , 1.41421356],
# [ 0. , 0. , 0. , 1. , 0. ],
# [ 0. , 0. , 0. , 0. , 1. ]])
# general functions: use the data attribute to access nonzeros
b.data = np.exp(b.data)
b.A
# array([[ 2.71828183, 0. , 0. , 0. , 0. ],
# [ 0. , 2.71828183, 0. , 0. , 0. ],
# [ 0. , 0. , 2.71828183, 0. , 4.11325038],
# [ 0. , 0. , 0. , 2.71828183, 0. ],
# [ 0. , 0. , 0. , 0. , 2.71828183]])
scipy 中的稀疏矩阵对象实现了方法 __abs__()
。这意味着您可以使用 Python 的 内置 abs()
函数。它会将调用分派给 __abs__()
方法。例如,
In [16]: from scipy.sparse import csr_matrix
In [17]: a = csr_matrix([[1+1j, 0, 0, 0], [0, -2, 0, 0], [0, 0, 0, 0], [3-4j, 0, -5j, 0]])
In [18]: a.A
Out[18]:
array([[ 1.+1.j, 0.+0.j, 0.+0.j, 0.+0.j],
[ 0.+0.j, -2.+0.j, 0.+0.j, 0.+0.j],
[ 0.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
[ 3.-4.j, 0.+0.j, 0.-5.j, 0.+0.j]])
In [19]: b = abs(a)
In [20]: b.A
Out[20]:
array([[ 1.41421356, 0. , 0. , 0. ],
[ 0. , 2. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ],
[ 5. , 0. , 5. , 0. ]])