当前位置: 首页 > 面试题库 >

设置csr_matrix的行

慕容文昌
2023-03-14
问题内容

我有一个稀疏的csr_matrix,我想将单行的值更改为不同的值。但是,我找不到简单有效的实现方式。这是它要做的:

A = csr_matrix([[0, 1, 0],
                [1, 0, 1],
                [0, 1, 0]])
new_row = np.array([-1, -1, -1])
print(set_row_csr(A, 2, new_row).todense())

>>> [[ 0,  1, 0],
     [ 1,  0, 1],
     [-1, -1, -1]]

这是我目前的实现set_row_csr

def set_row_csr(A, row_idx, new_row):
    A[row_idx, :] = new_row
    return A

但是,这给了我一个SparseEfficiencyWarning。有没有一种方法可以在没有手动索引操作的情况下完成此操作,或者这是我唯一的出路?


问题答案:

最后,我设法通过索引处理来完成此任务。

def set_row_csr(A, row_idx, new_row):
    '''
    Replace a row in a CSR sparse matrix A.

    Parameters
    ----------
    A: csr_matrix
        Matrix to change
    row_idx: int
        index of the row to be changed
    new_row: np.array
        list of new values for the row of A

    Returns
    -------
    None (the matrix A is changed in place)

    Prerequisites
    -------------
    The row index shall be smaller than the number of rows in A
    The number of elements in new row must be equal to the number of columns in matrix A
    '''
    assert sparse.isspmatrix_csr(A), 'A shall be a csr_matrix'
    assert row_idx < A.shape[0], \
            'The row index ({0}) shall be smaller than the number of rows in A ({1})' \
            .format(row_idx, A.shape[0])
    try:
        N_elements_new_row = len(new_row)
    except TypeError:
        msg = 'Argument new_row shall be a list or numpy array, is now a {0}'\
        .format(type(new_row))
        raise AssertionError(msg)
    N_cols = A.shape[1]
    assert N_cols == N_elements_new_row, \
            'The number of elements in new row ({0}) must be equal to ' \
            'the number of columns in matrix A ({1})' \
            .format(N_elements_new_row, N_cols)

    idx_start_row = A.indptr[row_idx]
    idx_end_row = A.indptr[row_idx + 1]
    additional_nnz = N_cols - (idx_end_row - idx_start_row)

    A.data = np.r_[A.data[:idx_start_row], new_row, A.data[idx_end_row:]]
    A.indices = np.r_[A.indices[:idx_start_row], np.arange(N_cols), A.indices[idx_end_row:]]
    A.indptr = np.r_[A.indptr[:row_idx + 1], A.indptr[(row_idx + 1):] + additional_nnz]


 类似资料:
  • 我正在开发一个应用程序,我显式地将应用程序的语言环境设置为阿拉伯语。然而,我想收集英语的电话号码。我如何才能将EditText和TextView的语言环境显式地设置为美国英语。 下面是我如何设置应用程序区域设置的。我有一门助手课 在我的活动中,我在中使用这个助手,如下所示: 如何分别为我们设置EditText或TextView的区域设置?

  • 我将设置为,并将其添加到我的。当我运行和echo,它们都给了我正确的信息。但是,当我运行libgdx安装程序时,它会给出以下错误:<code>错误:未设置JAVA_HOME,并且在路径中找不到任何“JAVA”命令。 请在您的环境中设置JAVA_HOME变量,以匹配您的JAVA安装位置。 有什么想法吗?

  • Appium 给用户提供了在一个机器上启动多个 Android sessions 的方案。该方案只需要通过不同参数来启动的多个 Appium 服务。 以下是启动多个 Android 会话的一些重要参数: -p Appium 主要端口 -U 设备 id -bp Appium bootstrap 端口 --chromedriver-port chromedriver 端口 (若是在使用 webview

  • 问题内容: 在Obj-C中 将设置contentMode。 为什么 在Swift中不能工作? 问题答案: 令人困惑的是,Swift删除了ObjC枚举值的前缀: 这是因为Swift已经知道正在使用哪种枚举类型。另外,您也可以指定枚举: 注意:在版本3之前的Swift版本中,“ scaleAspectFill”需要大写。

  • 设置菜单 可从主菜单进入设置当功能打开时,轻击以便将图标转成绿色。 连续心率。开关连续心率追踪。 飞行模式。切断健身追踪设备的所有无线通讯。 “请勿打扰”模式。禁用因手腕运动的显示屏亮起,并阻断来自您手机的智能通知。 心率 传感器模式。使用 A370 作为心率传感器,并配备心率接收设备。 关机。关闭设备。 重置当前蓝牙连接。若要使用任何蓝牙配件,需要与设备再次配对。 信息。查看您设备的 ID,固件

  • 一、简介   “设置"用于PHPCMS系统常用参数配置与管理员帐号维护。 二、功能演示 相关设置 管理员设置

  • 设置 设置包含:采集设置、站点设置、邮件发送设置、代理设置等 采集设置 开启自动采集、设置采集参数、图片本地化 页面渲染设置 代理设置 防止被屏蔽IP 翻译设置 支持百度翻译和有道翻译 站点设置 关闭前台首页、开启图片验证码 邮件发送设置 找回密码时使用

  • 设置 控制台有很多设置,这些设置都可以在控制面板中找到。点击右上角的齿轮按钮就能打开设置面板。 图 10. 设置面板