2024-04-19 07:34:43 发布
网友
我不知道是打字错误还是代码错误,但您的示例缺少iternext:
iternext
R=[] it = np.nditer ( A, flags=['multi_index'] ) while not it.finished: if it[0]: R.append(M[it.multi_index]) it.iternext()
我认为添加到列表比R[ctnr]=...更简单、更快。如果R是一个规则数组,而稀疏索引速度较慢(甚至是最快的lil格式),那么它就很有竞争力。你知道吗
R[ctnr]=...
R
lil
ndindex将nditer的这种用法包装为:
ndindex
R=[] for index in np.ndindex(A.shape): if A[index]: R.append(M[index])
ndenumerate同样有效:
ndenumerate
R = [] for index,a in np.ndenumerate(A): if a: R.append(M[index])
但是我想知道你是否真的想推进cntr每个it步骤,而不仅仅是True案例。否则,将result重塑为(N,N)就没什么意义了。但是那样的话,你的问题不就是
cntr
it
True
result
(N,N)
M[:N, :N].multiply(A)
或者如果M是密集数组:
M
M[:N, :N]*A
实际上,如果M和A都是稀疏的,那么multiply的.data属性将与R列表相同。你知道吗
A
multiply
.data
In [76]: N=4 In [77]: M=np.arange(N*N*N*N).reshape(N*N,N*N) In [80]: a=np.array([0,1,0,1]) In [81]: A=np.einsum('i,j',a,a) In [82]: A Out[82]: array([[0, 0, 0, 0], [0, 1, 0, 1], [0, 0, 0, 0], [0, 1, 0, 1]]) In [83]: M[:N, :N]*A Out[83]: array([[ 0, 0, 0, 0], [ 0, 17, 0, 19], [ 0, 0, 0, 0], [ 0, 49, 0, 51]]) In [84]: c=sparse.csr_matrix(M)[:N,:N].multiply(sparse.csr_matrix(A)) In [85]: c.data Out[85]: array([17, 19, 49, 51], dtype=int32) In [89]: [M[index] for index, a in np.ndenumerate(A) if a] Out[89]: [17, 19, 49, 51]
我不知道是打字错误还是代码错误,但您的示例缺少
iternext
:我认为添加到列表比
R[ctnr]=...
更简单、更快。如果R
是一个规则数组,而稀疏索引速度较慢(甚至是最快的lil
格式),那么它就很有竞争力。你知道吗ndindex
将nditer的这种用法包装为:ndenumerate
同样有效:但是我想知道你是否真的想推进
cntr
每个it
步骤,而不仅仅是True
案例。否则,将result
重塑为(N,N)
就没什么意义了。但是那样的话,你的问题不就是或者如果
M
是密集数组:实际上,如果
M
和A
都是稀疏的,那么multiply
的.data
属性将与R
列表相同。你知道吗相关问题 更多 >
编程相关推荐