【问题标题】:The calculation for numpy array in pythonpython中numpy数组的计算
【发布时间】:2021-01-11 13:36:48
【问题描述】:

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

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

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

【问题讨论】:

    标签: python numpy boolean


    【解决方案1】:

    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

    【讨论】:

    • 谢谢,如何理解索引是布尔数组?
    • @Annie 这是一个int 数组。索引是整数,就像列表和元组一样。
    • 你好kwkt,如果我是对的,你的意思是它在step5自动识别False为0,True为1?从步骤 3 中 y 可以看出,test_idxs 是一个布尔数组。
    • @Annie Ah,抱歉我错过了。使用布尔列表,它充当门:如果列表的索引iTrue,则该索引的行包含在结果中,反之亦然。请注意,布尔列表必须与相应维度具有相同的长度(可以理解)。我正在更新我的答案。
    • 这很清楚。非常感谢。
    猜你喜欢
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多