矩阵和向量的逐元素点积[重复]

2024-01-09

确实有类似的问题here https://stackoverflow.com/questions/26168363/elegant-expression-for-row-wise-dot-product-of-two-matrices, here https://stackoverflow.com/questions/41443444/numpy-element-wise-dot-product, here https://stackoverflow.com/questions/15616742/vectorized-way-of-calculating-row-wise-dot-product-two-matrices-with-scipy,但我真的不明白如何将它们准确地应用到我的案例中。

我有一个矩阵数组和一个向量数组,我需要逐元素点积。插图:

In [1]: matrix1 = np.eye(5)

In [2]: matrix2 = np.eye(5) * 5

In [3]: matrices = np.array((matrix1,matrix2))

In [4]: matrices
Out[4]: 
array([[[ 1.,  0.,  0.,  0.,  0.],
        [ 0.,  1.,  0.,  0.,  0.],
        [ 0.,  0.,  1.,  0.,  0.],
        [ 0.,  0.,  0.,  1.,  0.],
        [ 0.,  0.,  0.,  0.,  1.]],

       [[ 5.,  0.,  0.,  0.,  0.],
        [ 0.,  5.,  0.,  0.,  0.],
        [ 0.,  0.,  5.,  0.,  0.],
        [ 0.,  0.,  0.,  5.,  0.],
        [ 0.,  0.,  0.,  0.,  5.]]])

In [5]: vectors = np.ones((5,2))

In [6]: vectors
Out[6]: 
array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.]])

In [9]: np.array([m @ v for m,v in zip(matrices, vectors.T)]).T
Out[9]: 
array([[ 1.,  5.],
       [ 1.,  5.],
       [ 1.,  5.],
       [ 1.,  5.],
       [ 1.,  5.]])

最后一行是我想要的输出。不幸的是,它的效率非常低,例如matrices @ vectors计算由于广播而不需要的点积(如果我理解得很好,它返回两个向量的第一个矩阵点和两个向量的第二个矩阵点)实际上更快。

I guess np.einsum or np.tensordot在这里可能会有所帮助,但我所有的尝试都失败了:

In [30]: np.einsum("i,j", matrices, vectors)
ValueError: operand has more dimensions than subscripts given in einstein sum, but no '...' ellipsis provided to broadcast the extra dimensions.

In [34]: np.tensordot(matrices, vectors, axes=(0,1))
Out[34]: 
array([[[ 6.,  6.,  6.,  6.,  6.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.]],

       [[ 0.,  0.,  0.,  0.,  0.],
        [ 6.,  6.,  6.,  6.,  6.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.]],

       [[ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 6.,  6.,  6.,  6.,  6.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.]],

       [[ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 6.,  6.,  6.,  6.,  6.],
        [ 0.,  0.,  0.,  0.,  0.]],

       [[ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 0.,  0.,  0.,  0.,  0.],
        [ 6.,  6.,  6.,  6.,  6.]]])

注意:我的实际案例使用的矩阵比matrix1 and matrix2


With np.einsum,您可能会使用:

np.einsum("ijk,ki->ji", matrices, vectors)

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

矩阵和向量的逐元素点积[重复] 的相关文章

随机推荐

  • XP 上的 WMI 访问被拒绝

    我们的应用程序使用大量 WMI 调用 当使用来宾帐户连接到本地 WMI 服务器失败并出现 ACCESS DENIED 时 这对于用户帐户及以上帐户可以正常工作 如何以访客帐户访问WMI服务器 我添加了访客帐户以允许使用 WMIMGMT MS
  • C#:字符串作为事件的参数?

    我有一个用于表单的 GUI 线程和另一个用于计算事物的线程 该表单有一个 RichtextBox 我希望工作线程将字符串传递到表单 以便每个字符串都显示在文本框中 每次在工作线程中生成新字符串时 我都会调用一个事件 现在应该显示该字符串 但
  • 如何在 Vue 工作流程( Vanilla Bootstrap )中覆盖 Bootstrap 变量?

    官方推荐的自定义 主题引导程序的方法是使用 sass 覆盖引导程序变量 但我该如何做到这一点 或者更确切地说 如何将这部分流程添加到 Vue webpack 工作流程中 谷歌搜索导致尝试编辑vue config js文件将 scss 加载器
  • 命名捕获对的正则表达式问题

    我有以下值 start 2011 03 10T13 00 00Z end 2011 03 30T13 00 00Z scheme W3C DTF 我使用以下正则表达式去除 开始 和 结束 日期 并将它们分配给自己的命名捕获对 start P
  • 朴素贝叶斯分类器 - 多重决策

    我需要知道朴素贝叶斯分类器是否 可用于生成多个决策 我不能 找到任何有证据支持的例子 多项决定 我是这个领域的新手 所以 我有点 使困惑 实际上我需要开发字符识别软件 在那里我需要确定给定的字符是什么 看来贝叶斯分类器可以用来识别 给定的字
  • Numpy 中形状的 (4,) 和 (4,1) 有什么区别?

    我有两个 ndarrayA and B 其形状为 4 和另一个 4 1 当我想使用计算余弦距离时this http docs scipy org doc scipy reference generated scipy spatial dis
  • 如何在python脚本中多次导入python文件

    是否可以在 python 脚本中多次导入 python 文件 因为我使用 import 命令在函数中运行循环回到我的驱动程序文件 但它只工作一次 谢谢 edit 自己解决了 谢谢 您很可能不应该使用 import 来执行您想要执行的操作 没
  • 可变借用自动更改为不可变?

    看起来u 一个可变的借用 在以下情况下自动变得不可变 let v u Both u and v然后是不可变的借用引用 因此它们都是允许的 use std ascii AsciiExt fn show a str println a a fn
  • 如何帮助反序列化器了解泛型不需要反序列化绑定

    考虑以下代码 use std marker PhantomData use serde Deserialize derive Deserialize pub struct Parent
  • 唯一约束的命名约定

    命名约定很重要 主键和外键都有常用且明显的约定 PK Table and FK Table ReferencedTable 分别 这IX Table Column索引的命名也相当标准 那么 UNIQUE 约束呢 此约束是否有普遍接受的命名约
  • 在 Ruby 中执行 XSL 转换的最佳方法 (XSLT 2.0)

    在 Ruby 中执行 XSL 转换的最佳且最有效的方法是什么 我尝试过Nokogiri 但无论我尝试什么 它总是会导致 compilation error element stylesheet 该样式表在我的 XML 编辑器中完美运行 我在
  • Clojure:“java.lang.IllegalArgumentException:没有为键提供值:”当我更改要求时

    我得到了一个java lang IllegalArgumentException No value supplied for key 在我的 Clojure 代码中 我知道当我尝试解构作为参数传递的映射中的键时会发生这种情况 然而 奇怪的是
  • Django 从原始查询创建管理列表

    我愿意在管理员中创建查询集列表模板 查询集是通过cursor execute 获得的 因此可能需要一个假模型 基本上我只是想利用 Django admin list 提供的分页和过滤功能 这是我的代码的相关部分 模型 py class Qu
  • JSR250:CommonAnnotations for Java,2.3:@Resource 方法必须是遵循标准 JavaBeans 约定的 setter

    我在这条线上遇到问题 Resource public void setMessageDrivenContext MessageDrivenContext context this context context 消息是 JSR250 Jav
  • 将从mongo返回的日期转换为这种格式2015-10-25

    我有一个从 mongo db 返回的 json 文件 如下所示 id date 2014 10 19T04 00 00 000Z value 29 id date 2014 10 20T04 00 00 000Z value 20 id d
  • 使用OpenMP计算PI值

    我正在尝试通过并行化蒙特卡罗代码来学习如何使用 OpenMP 该代码通过给定的迭代次数计算 PI 的值 代码的核心内容是这样的 int chunk CHUNKSIZE count 0 pragma omp parallel shared c
  • Simplecov gem 在 Rails 中缺少未经测试的文件

    Using simple covRails 应用程序中的 gem 我们可以将未测试的文件包含在报告中吗 如果是 怎么办 如果不是 该文件应该计入覆盖率 对吧 尝试编辑您的config environments test rb并设置这一行 c
  • PhpStorm 中有选择当前行的键盘快捷键吗?

    在 PhpStorm 中有扩展选择的快捷方式ctrl w 有没有选择当前所有行的快捷方式 我正在寻找类似的东西ctrl l在崇高 这样的操作是可用的 但分配的快捷键 如果有 取决于实际使用的键盘映射 任何状况之下 Settings Pref
  • 确认第一条消息后发送第二条消息。 RabbitMQ 保证顺序吗?

    假设多个生产者发布到同一个交易所 E 扇出 每个生产商都有自己的渠道 队列 Q 绑定到交换机 E 生产者 P1 向 E 发布消息 M1 并从 E 接收确认 A1 只有在确认 A1 后 第二个生产者 P2 才发布第二条消息 M2 Rabbit
  • 矩阵和向量的逐元素点积[重复]

    这个问题在这里已经有答案了 确实有类似的问题here https stackoverflow com questions 26168363 elegant expression for row wise dot product of two