不能访问python2d数组中的行元素?

2024-06-23 19:44:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Scipy的coo_矩阵创建了一个二维矩阵,并有一个矩阵M:

df = pd.DataFrame(columns=["hub", "auth", "weight"])
M = coo_matrix((df.iloc[:,2], (df.iloc[:,0],df.iloc[:,1])), shape=(len(hubs) + len(auths), len(hubs) + len(auths)))
M = M.todense()

[[0 0 0 1 1 1 0]
[0 0 0 1 1 0 0]
[0 0 0 0 0 0 1]
[0 0 0 0 0 0 0]
[0 0 0 0 0 0 0]
[0 0 0 0 0 0 0]
[0 0 0 0 0 0 0]]

我可以成功地对数组进行切片,以获取其列和每列中的元素:

^{pr2}$

其中val等于1。我尝试做一些类似的事情来提取一行:

^{3}$

它也应该返回1,但是val返回

[[0 0 0 1 1 1 0]]

我做错什么了?在


Tags: columnsauthdataframedflen矩阵valscipy
1条回答
网友
1楼 · 发布于 2024-06-23 19:44:15

因为它是一个numpy数组(正如DYZ指出的那样,.todense()是在原始coo_矩阵上调用的):

请注意,原始矩阵或二维数组是7 x 7(7行x 7列)。当您调用col = M[:,3]时,您是说您想要第3列和所有行,这是一个7×1矩阵(7行乘1列)。当您调用col[2]时,实际上是在调用col[2,:]或获得第二行(现在它只是一个1x1矩阵)。在

现在,如果您调用row = M[0],实际上是在调用row = M[0,:],或者得到第0行和所有列,这是一个1×7矩阵(1列乘7行)。因此,调用val = row[2]会产生一个索引错误,因为新矩阵中只有1行。您可以改为调用val = row[:,2]来获取第二列。在

相关问题 更多 >

    热门问题