将二维数组加在一起的数字运算

问题描述 投票:0回答:1

我正在尝试创建一个对2-D矩阵求幂的函数,并将结果保存在3D数组中,其中第一个维度是对指数进行索引。这很重要,因为我要对矩阵求幂的行表示有关图上不同顶点的信息。因此,例如,如果我们有A,A ^ 2,A ^ 3,则每个形状都是(50,50),而我想要一个矩阵D =(3,50,50),这样我就可以得到D [:,1 ,: ]检索有关节点1的所有信息,并能够对其进行矩阵乘法。我的代码当前为

def expo(times,A,n):
    temp = A;
    result = csr_matrix.toarray(temp)
    for i in range(0,times):
        temp = np.dot(temp,A)
        if i == 0:
            result = np.array([result,csr_matrix.toarray(temp)]) # this creates a (2,50,50) array
        if i > 0:
            result = np.append(result,csr_matrix.toarray(temp),axis=0) # this does not work
    return result

但是,这不起作用,因为在“ i> 0”情况下,临时数组的形状为(50,50),并且无法附加。我不确定如何进行这项工作,但我对Numpy中的维度感到困惑,例如为什么有时认为(50,1)而其他时候认为(50,)。任何人都可以帮助我使此代码正常工作,并在Numpy中一般性地解释如何完成这些事情?

python arrays numpy dimension
1个回答
0
投票

文档参考

如果要在numpy中堆叠矩阵,则可以使用stack function。如果您还希望索引对应于指数,则可能要在输出的开头添加一个单位矩阵:

MWE

stack

评论

如您所见,我们首先简单地创建矩阵列表,然后在最后将它们转换为数组。我不确定您是否真的需要3D数组,因为您也可以仅索引已创建的列表,但是这取决于您的用例(是否方便)。

我想许多numpy函数的import numpy as np def expo(A, n): result =[np.eye(len(A)), A,] for _ in range(n-1): result.append(result[-1].dot(A)) return np.stack(result, axis=0) # If you do not really need the 3D array, # you could also just return the list result = expo(np.array([[1,-2],[-2,1]]), 3) print(result) # [[[ 1. 0.] # [ 0. 1.]] # # [[ 1. -2.] # [ -2. 1.]] # # [[ 5. -4.] # [ -4. 5.]] # # [[ 13. -14.] # [-14. 13.]]] print(result[1]) # [[ 1. -2.] # [-2. 1.]] 关键字参数起初可能会令人困惑,但是文档通常包含很好的示例,并且结合了相同的尝试和错误,应该会使您大为受益。例如,对于axis,第一个示例确实正是您想要执行的操作。

© www.soinside.com 2019 - 2024. All rights reserved.