使用 Python、NumPy、SciPy 进行矩阵乘法的高效矩阵切片

2024-02-14

我想重塑 2dscipy.sparse.csr.csr_matrix(我们称其为A) 到 2dnumpy.ndarray(让我们称之为B).

A可能

>shape(A)
(90, 10)

then B应该

>shape(B)
(9,10)

其中每 10 行A将被重塑为一个新的新值,即该窗口和列的最大值。列运算符不适用于这种不可散列类型的稀疏矩阵。我怎样才能得到这个B通过使用矩阵乘法?


使用矩阵乘法,您可以进行有效的切片,创建一个“切片器”矩阵,其中的矩阵位于正确的位置。切片矩阵将具有相同的type作为“切片器”,因此您可以有效地控制输出类型。

下面您将看到一些比较,对您来说最有效的方法是询问.A矩阵并对其进行切片。事实证明它比.toarray()方法。当“切片器”创建为ndarray,乘以csr矩阵并对结果进行切片。

OBS:使用coo稀疏矩阵A导致时间稍微慢一些,保持相同的比例,并且sol3不适用,我后来意识到在乘法中它被转换为csr自动地。

import scipy
import scipy.sparse.csr as csr
test = csr.csr_matrix([
[11,12,13,14,15,16,17,18,19],
[21,22,23,24,25,26,27,28,29],
[31,32,33,34,35,36,37,38,39],
[41,42,43,44,45,46,47,48,49],
[51,52,53,54,55,56,57,58,59],
[61,62,63,64,65,66,67,68,69],
[71,72,73,74,75,76,77,78,79],
[81,82,83,84,85,86,88,88,89],
[91,92,93,94,95,96,99,98,99]])

def sol1():
    B = test.A[2:5]

def sol2():
    slicer = scipy.array([[0,0,0,0,0,0,0,0,0],
                          [0,0,0,0,0,0,0,0,0],
                          [0,0,1,0,0,0,0,0,0],
                          [0,0,0,1,0,0,0,0,0],
                          [0,0,0,0,1,0,0,0,0]])
    B = (slicer*test)[2:]
    return B

def sol3():
    B = (test[2:5]).A
    return B

def sol4():
    slicer = csr.csr_matrix( ((1,1,1),((2,3,4),(2,3,4))), shape=(5,9) )
    B = ((slicer*test).A)[2:] # just changing when we do the slicing
    return B

def sol5():
    slicer = csr.csr_matrix( ((1,1,1),((2,3,4),(2,3,4))), shape=(5,9) )
    B = ((slicer*test)[2:]).A
    return B


timeit sol1()
#10000 loops, best of 3: 60.4 us per loop

timeit sol2()
#10000 loops, best of 3: 91.4 us per loop

timeit sol3()
#10000 loops, best of 3: 111 us per loop

timeit sol4()
#1000 loops, best of 3: 310 us per loop

timeit sol5()
#1000 loops, best of 3: 363 us per loop

编辑:答案已更新替换.toarray() by .A,提供更快的结果,现在最好的解决方案被放置在顶部

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python、NumPy、SciPy 进行矩阵乘法的高效矩阵切片 的相关文章

  • 稀有对象的 python 类型注释,例如 psycopg2 对象

    我了解内置类型 但是我如何指定稀有对象 例如数据库连接对象 def get connection and cursor gt tuple psycopg2 extensions cursor psycopg2 extensions conn
  • 使用 django-rest-framework 设置对象级权限

    尝试使用 django rest framework 最干净 最规范地管理 django guardian 对象级权限 我想将对象的读取权限 module view object 分配给在执行 POST 时发出请求的用户 我的基于阶级的观点
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 多处理中的动态池大小?

    有没有办法动态调整multiprocessing Pool尺寸 我正在编写一个简单的服务器进程 它会产生工作人员来处理新任务 使用multiprocessing Process对于这种情况可能更适合 因为工作人员的数量不应该是固定的 但我需
  • 按边距(“全部”)值列对 Pandas 数据透视表进行排序

    我试图根据 pandas 数据透视表中的行总和对最后一列 边距 aggrfunc 进行降序排序 我知道我在这里错过了一些简单的东西 但我无法弄清楚 数据框 数据透视表 WIDGETS DATE 2 1 16 2 2 16 2 3 16 Al
  • 在Python中从大文件中搜索单词列表

    我是新蟒蛇 我有一个单词列表和一个非常大的文件 我想删除文件中包含单词列表中的单词的行 单词列表按排序给出 并且可以在初始化期间输入 我正在努力寻找解决这个问题的最佳方法 我现在正在进行线性搜索 这花费了太多时间 有什么建议么 您可以使用i
  • IndexError:索引 10 超出尺寸为 10 的轴 0 的范围

    我正在以数字方式为 x 网格和 x 向量以及时间网格设置网格 但我再次设置了一个数组x 位置 只能在 0 到 20 之间并且t 时间 将从 0 到 1000 以便求解热方程 但每次我想要 例如 我将步数设置为 10 时 都会收到错误 Tra
  • Series.sort() 和 Series.order() 有什么区别?

    s pd Series nr randint 0 10 5 index nr randint 0 10 5 s Output 1 3 7 6 2 0 9 7 1 6 order 按值排序并返回一个新系列 s order Output 2 0
  • 使用python从gst管道抓取帧到opencv

    我在用着OpenCV http opencv org 和GStreamer0 10 我使用此管道通过自定义套接字通过 UDP 接收 MPEG ts 数据包sockfd由 python 提供并显示它xvimagesink 而且效果很好 以下命
  • 使用 for 循环创建一系列元组

    我已经搜索过 但找不到答案 尽管我确信它已经存在了 我对 python 很陌生 但我以前用其他语言做过这种事情 我正在以行形式读取数据文件 我想将每行数据存储在它自己的元组中 以便在 for 循环之外访问 tup i inLine wher
  • Spark 和 Python 使用自定义文件格式/生成器作为 RDD 的输入

    我想问一下 Spark 中输入的可能性 我可以看到从http spark apache org docs latest programming guide html http spark apache org docs latest pro
  • 在Raspberry pi上升级skimage版本

    我已经使用 Raspberry Pi 2 上的 synaptic 包管理器安装了 python 包 然而 skimage 模块版本 0 6 是 synaptic 中最新的可用版本 有人可以指导我如何将其升级到0 11 因为旧版本中缺少某些功
  • 使用另一个数据帧在数据帧中创建子列

    我对 python 和 pandas 很陌生 在这里 我有一个以下数据框 did features offset word JAPE feature manual feature 0 200 0 aa 200 200 0 200 11 bf
  • 检测是否从psycopg2游标获取?

    假设我执行以下命令 insert into hello username values me 我跑起来就像 cursor fetchall 我收到以下错误 psycopg2 ProgrammingError no results to fe
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • minizinc python 安装

    我通过 anaconda 提示符在 python 上安装了 minizinc 就像其他软件包一样 pip install minizinc 该软件包表示已成功安装 我可以导入该模块 但是 我正在遵循基本示例https minizinc py
  • 如何使用 python 定位和读取 Data Matrix 代码

    我正在尝试读取微管底部的数据矩阵条形码 我试过libdmtx http libdmtx sourceforge net 它有 python 绑定 当矩阵的点是方形时工作得相当好 但当矩阵的点是圆形时工作得更糟 如下所示 另一个复杂问题是在某
  • python从二进制文件中读取16字节长的双精度值

    我找到了蟒蛇struct unpack 读取其他程序生成的二进制数据非常方便 问题 如何阅读16 字节长双精度数出二进制文件 以下 C 代码将 1 01 写入二进制文件三次 分别使用 4 字节浮点型 8 字节双精度型和 16 字节长双精度型
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发

随机推荐

  • 在更改视图的可见性时应用动画

    我的应用程序中有一个 Horizo ntalScrollView 并且我经常使用它的可见性 可见和消失 所以我想要的是 我可以应用某种动画或其他东西 使其开始以滑动的方式变得可见和不可见 而不是突然使其可见和不可见吗 任何帮助或建议将不胜感
  • 本地主机上的 Django/Celery 多个队列 - 路由不起作用

    我跟着芹菜docs http celery readthedocs org en latest userguide routing html manual routing在我的开发机器上定义 2 个队列 我的芹菜设置 CELERY ALWA
  • 从 Eclipse 中删除插件的正确方法

    上次 我遇到了从 Eclipse 中删除插件的问题 症状 1 如果删除通过已安装菜单 无法正确重新安装并且有多个视角 例如对于 SQL 资源管理器 在Open Perspective menu 2 如果通过文件系统删除 手动从plugins
  • 人员 API 谷歌配额限制

    我正在研究 People API 这仅适用于 google 用户 有人知道吗 我一天 分钟可以免费询问多少次 一般配额限制是多少 超过门槛需要花费多少钱 Thanks 有两种不同的 People API 您可以在云控制台中查看两者的配额 G
  • 具有基本身份验证的 Webclient / HttpWebRequest 返回 404 未找到有效 URL

    编辑 我想回来指出问题根本不在我这边 而是与另一家公司的代码有关 我正在尝试使用基本身份验证来打开页面 我不断收到 404 页面未找到错误 我可以将我的网址复制并粘贴到浏览器中 它工作正常 如果我尚未登录他们的网站 它会弹出一个凭据框 否则
  • ASP.NET Core 默认调试启动 URL

    使用 ASP NET Core Web API 模板时 默认调试启动 URL 以某种方式设置为api values 此默认配置在哪里以及如何更改它 我能找到的有关此启动 URL 声明位置的文档非常少 这个里面有简短的提及博客文章 https
  • vuelidate 异步验证器 - 如何去抖?

    因此 我的电子邮件 用户表单元素上的异步验证器存在问题 每次输入字母时 它都会检查有效性 如果电子邮件有 30 个字符 那么就超过 30 个电话 有人知道消除 vuelidate 自定义验证器的最佳方法吗 当我尝试使用 debounce 时
  • 传统 For 循环与增强型 For 循环 [重复]

    这个问题在这里已经有答案了 这段代码 import java util import java io class TestClass public static void main String args throws Exception
  • Visual Basic .NET 中的 UInt32 数据类型是什么?

    是什么UInt32VB NET 中的数据类型 有人可以告诉我它的位长度和之间的区别吗UInt32 and Int32 它是整数还是浮点数 它是一个无符号 32 位整数 U 表示无符号 Int 表示整数 32 换 32 或者你可以看看文档 h
  • 将 SageMaker 管道模式与 tfrecords 的 s3 目录结合使用

    我打电话给sagemaker tensorflow TensorFlow fit 当我使用时无限期挂起 没有错误消息Pipe代替File as the input mode 我相应地替换了TensorFlowDataset with Pip
  • Log4j2 系统属性写入文件

    我使用以下 log4j2 配置
  • 平板电脑或手机 - Android

    有没有办法检查用户是否使用平板电脑或手机 我的倾斜功能和新平板电脑 Transformer 出现问题 正如之前提到的 您不想检查设备是平板电脑还是手机 而是想了解设备的功能 大多数时候 平板电脑和手机之间的区别在于屏幕尺寸 这就是您想要使用
  • 将 URL 拖放到浏览器中并使用 jQuery 进行处理

    我需要能够将 URL 从浏览器中的 URL 栏 拖放到网页中 使用该链接向 Web 服务发出请求 然后获取 JSON 回复并填充表单 我已经能够创建处理链接的 Web 服务 并且我已经能够使用 jQuery ajax 发出请求 但我不确定如
  • MVVM 命令绑定

    我正在尝试学习 MVVM 模式 我遇到的主要问题是学习应该在哪里声明 创建和绑定命令对象 2个例子 我有一个主窗体 其作用类似于交换机或主菜单 选择按钮 1 并显示视图 1 选择按钮 2 并显示视图 2 伟大的 现在我想返回主窗体 因此我需
  • 错误:React Native expo-video-thumbnails IOS 中无法写入文件错误

    我正在从视频 URL 生成缩略图 它在 Android 中工作正常 但在 IOS 中出现错误 Error Can t write to file 下面是我的代码 import as VideoThumbnails from expo vid
  • Node JS 智利现行 DST 规则

    根据规范 Node JS ES5 在处理 Date 对象时应使用当前的 dts 规则 当前的意思是 现在 而不是特定的日期 这并不完美 但目前对我来说已经足够了 目前 该规则是错误的 由于智利法律的变化 简单探针 console log n
  • 如何使用 scala 将 postgreSQL 数据库连接到 Apache Spark?

    我想知道如何在 scala 中执行以下操作 使用 Spark scala 连接到 postgreSQL 数据库 编写 SQL 查询 如 SELECT UPDATE 等 来修改表 那个数据库 我知道使用 scala 来做到这一点 但是如何在打
  • 使用 JavaScript 获取 iPhone X 安全区域

    We have safe area inset left safe area inset right safe area inset top and safe area inset bottom在 CSS 中 但是我们如何使用 JavaSc
  • 使用 typescript 将消息发送到特定通道

    每当新用户加入服务器 公会 时 我想向 欢迎 文本通道发送一条问候消息 我面临的问题是 当我找到想要的频道时 我将收到类型为GuildChannel Since GuildChannel has no send 功能 我无法发送消息 但我找
  • 使用 Python、NumPy、SciPy 进行矩阵乘法的高效矩阵切片

    我想重塑 2dscipy sparse csr csr matrix 我们称其为A 到 2dnumpy ndarray 让我们称之为B A可能 gt shape A 90 10 then B应该 gt shape B 9 10 其中每 10