首页 > 解决方案 > python中numpy数组的计算

问题描述

有一个numpy的计算过程如下,已经正确批了,但是我对这个过程不是很清楚,想寻求帮助。步骤如下:

  1. 通过 unstack 创建的user_item_train矩阵如下: 在此处输入图像描述
  2. 有一个测试数据索引列表为 test_idx,如下所示: 在此处输入图像描述
  3. 下面的代码:从训练数据集中查找 test_idx 中的 user_id,并返回布尔值 在此处输入图像描述
  4. 通过 np.linalg.svd(user_item_train,full_matrices=False) 生成的u_train 数据集如下: 在此处输入图像描述
  5. 我不明白这一步: 在此处输入图像描述

我可以请你帮忙解释一下吗?
谢谢。

标签: pythonnumpyboolean

解决方案


u_train是一个二维数组。在 NumPy 中,您可以将列表用作切片。举个例子最容易想象:假设我有一个 4x4 数组,名为arr. 然后,

  • arr[3, 1]给我第 3 行第 1 列的值(请记住,我们从 0 开始计数)。
  • arr[[1, 3], [0, 2]]给我一个具有以下原始索引的 2x1 数组:即第 1 行和第 3 行,第 0 列和第 2 列。
+--------+--------+
| (1, 0) | (1, 2) |
+--------+--------+
| (3, 0) | (3, 2) |
+--------+--------+
  • arr[[0, 3], :]给我第 0 行和第 3 行,所有列,因为:这意味着该轴上的所有内容:
+--------+--------+--------+--------+
| (0, 0) | (0, 1) | (0, 2) | (0, 3) |
+--------+--------+--------+--------+
| (3, 0) | (3, 1) | (3, 2) | (3, 3) |
+--------+--------+--------+--------+
  • arr[3]等同于arr[3, :],这只是语法糖。
  • 对于使用布尔列表作为索引,True列表中的 a 表示包含与其相同索引的行,反之亦然。例如, arr[:, [True, True, False, False]]等价于arr[:, [0, 1]]。请注意,也许很明显,布尔列表的长度必须与维度相同,因此arr[:, [True, False, True]]会引发IndexError.

推荐阅读