- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个 python 项目并使用 numpy。我经常需要通过单位矩阵计算矩阵的克罗内克积。这些是我代码中的一个相当大的瓶颈,所以我想优化它们。我必须服用两种产品。第一个是:
np.kron(np.eye(N), A)
这个很容易优化,只需使用 scipy.linalg.block_diag .该产品相当于:
la.block_diag(*[A]*N)
大约快 10 倍。但是,我不确定如何优化第二种产品:
np.kron(A, np.eye(N))
我可以使用类似的技巧吗?
最佳答案
一种方法是初始化 4D
的输出数组,然后从 A
向其赋值。这样的分配会广播值,这就是我们在 NumPy 中提高效率的地方。
因此,解决方案是这样的-
# Get shape of A
m,n = A.shape
# Initialize output array as 4D
out = np.zeros((m,N,n,N))
# Get range array for indexing into the second and fourth axes
r = np.arange(N)
# Index into the second and fourth axes and selecting all elements along
# the rest to assign values from A. The values are broadcasted.
out[:,r,:,r] = A
# Finally reshape back to 2D
out.shape = (m*N,n*N)
作为一个函数-
def kron_A_N(A, N): # Simulates np.kron(A, np.eye(N))
m,n = A.shape
out = np.zeros((m,N,n,N),dtype=A.dtype)
r = np.arange(N)
out[:,r,:,r] = A
out.shape = (m*N,n*N)
return out
要模拟 np.kron(np.eye(N), A)
,只需交换第一轴和第二轴的操作,第三轴和第四轴也类似 -
def kron_N_A(A, N): # Simulates np.kron(np.eye(N), A)
m,n = A.shape
out = np.zeros((N,m,N,n),dtype=A.dtype)
r = np.arange(N)
out[r,:,r,:] = A
out.shape = (m*N,n*N)
return out
时间 -
In [174]: N = 100
...: A = np.random.rand(100,100)
...:
In [175]: np.allclose(np.kron(A, np.eye(N)), kron_A_N(A,N))
Out[175]: True
In [176]: %timeit np.kron(A, np.eye(N))
1 loops, best of 3: 458 ms per loop
In [177]: %timeit kron_A_N(A, N)
10 loops, best of 3: 58.4 ms per loop
In [178]: 458/58.4
Out[178]: 7.842465753424658
关于python - 具有单位矩阵和正则矩阵的高效 Kronecker 积 - NumPy/Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461658/
我在构建执行特定任务的可变参数函数时遇到问题。对于我的特定示例,我使用的是 2x2 矩阵,但您可以想象我的问题可以推广到许多数据类型。此外,对于我的示例,“眼睛”是 2x2 单位矩阵。 好的,所以我想
我正在尝试使用 cvxpy 进行优化。 w=cvxpy.Variable((10,1)) cvxpy.kron(w,w) 这不起作用说第一个参数应该是常量, 然后我尝试使用 numpy numpy.k
我想加速以下 for 循环。 % Use random matrices for testing. % Elapsed time of the following code is around 19
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
因此,我正在尝试计算两个任意维度矩阵的克罗内克积。 (为了示例,我使用了相同维度的方阵) 最初我尝试使用 kron : a = np.random.random((60,60)) b = np.ran
我正在从事我的第一个大型 Python 项目。我有一个函数,其中包含以下代码: # EXPAND THE EXPECTED VALUE TO APPLY TO ALL STAT
背景 生成随机权重列表后: sizes = [784,30,10] weights = [np.random.randn(y, x) for x, y in zip(sizes[:-1],sizes[
我正在尝试计算 张量积(更新:我想要的实际上叫做 Kronecker product ,这种命名困惑是我找不到 np.kron 的原因) 的多个矩阵,这样我就可以将变换应用于向量,这些向量本身就是多个
我可以通过放弃 for 循环来优化 Matlab 中的以下代码吗? A = []; B = randn(4,8); C = randn(8,4); I = randperm(8,3); J = ran
我正在开发一个 python 项目并使用 numpy。我经常需要通过单位矩阵计算矩阵的克罗内克积。这些是我代码中的一个相当大的瓶颈,所以我想优化它们。我必须服用两种产品。第一个是: np.kron(n
假设我们有 2 个 2X2 numpy 数组: X=np.array([[0,1],[1,0]]) 和 I=np.array([[1,0],[0,1]]) 考虑一下克罗内克产品 XX=X^X 我让符号
我正在尝试仅使用 repmat 和 reshape 来复制 Kron 产品,我相信我已经非常接近了,但我无法完成最后一次正确的 reshape 。特别是我在 reshape A 时遇到问题 为简单起见
我是一名优秀的程序员,十分优秀!