我使用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]]
我做错什么了?在
因为它是一个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]
来获取第二列。在相关问题 更多 >
编程相关推荐