python 中 numpy 数组的计算

The calculation for numpy array in python

有一个numpy的计算过程如下,已正确通过,但我对过程不太了解,希望得到帮助。步骤如下:

  1. user_item_train矩阵,通过unstack创建如下:
  2. 测试数据索引列表test_idx如下:
  3. 下面的代码:从训练数据集中查找 test_idx 中的 user_id,以及 return 布尔值
  4. 通过np.linalg.svd(user_item_train,full_matrices=False生成如下u_train数据集
  5. 我不明白这一步:

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

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

  • 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表示包含与其相同索引的行,反之亦然。例如, arr[:, [True, True, False, False]] 等同于 arr[:, [0, 1]]。 请注意,也许很明显,布尔列表的长度必须与维度相同,因此 arr[:, [True, False, True]] 将引发 IndexError.