当前位置: 代码迷 >> python >> 无法访问 Python 二维数组中的行元素?
  详细解决方案

无法访问 Python 二维数组中的行元素?

热度:92   发布时间:2023-07-14 09:53:19.0

我使用 Scipy 的 coo_matrix 创建了一个二维矩阵,并有一个矩阵 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]]

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

col = M[:,3]
val = col[0]

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

row = M[0]
val = row[2]

这也应该返回 1,但 val 返回

[[0 0 0 1 1 1 0]]

我在这里做错了什么?

由于它是一个 numpy 数组(正如 DYZ 指出的那样,在原始 coo_matrix 上调用了.todense() ):

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

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

  相关解决方案