我有一组n个向量存储在3 xn矩阵中z.我找到了外用产品np.einsum.当我使用时间计时:
%timeit v=np.einsum('i...,j...->ij...',z,z)
Run Code Online (Sandbox Code Playgroud)
我得到了结果:
The slowest run took 7.23 times longer than the fastest. This could mean that an
intermediate result is being cached
100000 loops, best of 3: 2.9 µs per loop
Run Code Online (Sandbox Code Playgroud)
这里发生了什么,可以避免吗?最好的3是2.9us,但最慢可能更典型.
当使用scipy.sparse.spdiags或scipy.sparse.diags时,我注意到我希望我认为这是例程中的错误,例如
scipy.sparse.spdiags([1.1,1.2,1.3],1,4,4).toarray()
Run Code Online (Sandbox Code Playgroud)
回报
array([[ 0. , 1.2, 0. , 0. ],
[ 0. , 0. , 1.3, 0. ],
[ 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ]])
Run Code Online (Sandbox Code Playgroud)
对于正对角线,它会丢弃第一个k数据.有人可能会说,这有一些宏大的编程原因,我只需要用零填充.好吧很烦人,可以使用scipy.sparse.diags来提供正确的结果.但是这个例程有一个无法解决的bug
scipy.sparse.diags([1.1,1.2],0,(4,2)).toarray()
Run Code Online (Sandbox Code Playgroud)
给
array([[ 1.1, 0. ],
[ 0. , 1.2],
[ 0. , 0. ],
[ 0. , 0. ]])
Run Code Online (Sandbox Code Playgroud)
好和
scipy.sparse.diags([1.1,1.2],-2,(4,2)).toarray()
Run Code Online (Sandbox Code Playgroud)
给
array([[ 0. , 0. ],
[ 0. , 0. ],
[ 1.1, 0. ],
[ 0. , 1.2]])
Run Code Online (Sandbox Code Playgroud)
但 …
java 中的布尔基元本身是一种类型还是可以作为 int 进行操作?在我见过的其他语言中,布尔类型可以像 false=0 和 true=1 一样操作,这有时非常方便。