如何将对象传递给 numpy 点函数

2024-03-06

假设我已经定义了我的对象:

import numpy as np
class myTensor:
    def __init__(self,data):
        self.data=np.array(data)
        self.parent=[]

如何将“myTensor”作为输入传递给 np.dot?例如:

t1=myTensor([1,2])
t2=myTensor([3,4])

现在,如果我打电话

t3=np.dot(t1,t2)

我期望t3是另一个myTensor对象,其t3.data是数组[1,2]和[3,4]的点积,即11; t3.parents 是包含 t1 和 t2 的列表。

感谢您的任何建议!


查看有关如何编写自定义数组容器的教程:https://numpy.org/devdocs/user/basics.dispatch.html https://numpy.org/devdocs/user/basics.dispatch.html

from numbers import Number

import numpy as np

HANDLED_FUNCTIONS = {}


class Mytensor():
    def __init__(self, data):
        self.data = np.array(data)
        self.parents = []

    def __repr__(self):
        return f'Tensor: {self.data}'

    def __array_ufunc__(self, ufunc, method, *inputs, **kwargs):
        if method == '__call__':
            scalars = []
            for input in inputs:
                if isinstance(input, Number):
                    scalars.append(input)
                elif isinstance(input, self.__class__):
                    scalars.append(input.data)
                else:
                    return NotImplemented
            output = self.__class__(ufunc(*scalars, **kwargs))
            output.parents.extend(scalars)
            return output
        else:
            return NotImplemented

    def __array_function__(self, func, types, args, kwargs):
        if func not in HANDLED_FUNCTIONS:
            return NotImplemented
        if not all(issubclass(t, self.__class__) for t in types):
            return NotImplemented
        return HANDLED_FUNCTIONS[func](*args, **kwargs)


def implements(np_function):
    def decorator(func):
        HANDLED_FUNCTIONS[np_function] = func
        return func

    return decorator


@implements(np.dot)
def dot(t1: Mytensor, t2: Mytensor):
    output = Mytensor(np.dot(t1.data, t2.data))
    output.parents.extend([t1, t2])
    return output

您现在可以运行 np.exp 或 np.dot 并返回一个 Tensor 对象:

if __name__ == '__main__':
    t1 = Mytensor([[1, 2], [3, 4]])
    t2 = Mytensor([[5, 6], [7, 8]])
    output1 = np.exp(t1)
    print(f'result: {output1}')
    print(f'parents: {output1.parents}')

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

如何将对象传递给 numpy 点函数 的相关文章

随机推荐

  • 插入时返回 ID?

    我有一个 INSERT 查询 我希望数据库返回我刚刚插入的行的 ID sqlString INSERT INTO MagicBoxes OwnerID Key Name Permissions Active LastUpdated VALU
  • 有条件切换情况

    我是否在条件下编写了正确的 switch case var cnt div1 p length alert cnt switch cnt case cnt gt 10 cnt lt 20 alert 10 break case cnt gt
  • EL 表达式将整数解析为 long

    我在 JBoss 7 上使用带有 primefaces 的 JSF 2 0 在代码的某些部分 我有以下内容 public void setItemValue int value this value value 并在 xhtml 中
  • 无法从 SwfTreeView 选择复选框

    在我的应用程序中 有一个 swfTreeView 对象 它有 2 个父复选框 Total Systmatic 并且两个父复选框都有 2 个子复选框 EQ FX for Total 和 EX IR for Systematic 我无法选择这些
  • 如何等待流完成管道传输? (节点)

    我有一个 Promise 的 for 循环数组 所以我使用 Promise all 来遍历它们 然后调用 then let promises promises push promise1 promises push promise2 pro
  • 我可以为背景大小实现纯 CSS 后备吗?

    这对于支持的浏览器来说效果很好background size 否则 图像会缩放 2 倍 a background image url img2x jpg 1000x1000 background size 100 height 500px
  • Android自定义EditText和后退按钮覆盖

    我想在显示软键盘时覆盖后退按钮 基本上 当按下后退按钮时 我希望键盘关闭 并且我想将一些文本附加到用户在编辑文本字段中键入的内容上 所以基本上我需要知道键盘何时关闭 经过搜索后 我意识到没有可用的 API 唯一真正的方法是创建 EditTe
  • 如何定位按钮精灵 css

    button1 background E68A00 url wooden jpg repeat x border 2px solid eee height 28px width 115px margin 50px 0 0 50px padd
  • Shell 脚本:获取 python: 命令未找到错误

    当我从 shell 脚本调用 Python 脚本时 它运行良好 python script py 但是当我从 Gerrit 中提取相同的脚本 然后添加调用 Python 脚本的代码后 它给了我以下错误 script sh line 126
  • php require_once 尝试仅在我的生产服务器上包含第二次

    我在各种包含文件的顶部都有这段代码 require once functions php 有时我需要包含几个包含文件来生成页面 并且在我的本地服务器上这工作正常 因为上面的代码告诉它只包含一次functions php 因此它不会尝试声明函
  • MS Entity Framework VS NHibernate 及其派生贡献(FluentNHibernate、Linq for NHibernate)

    我刚刚读过这个article http visualstudiomagazine com Articles 2009 12 01 Entity Sequel aspx Page 1关于实体框架 4 实际上是版本 2 实体框架 http ms
  • 将 for-each 循环替换为 lambda 表达式

    我只是重构一些旧项目以使用 Java 8 的功能 int counter 1 for Checker checker checkers if counter lt checkers size checker setNextChecker c
  • 不要使用 Xcode 8 复制 swift 库吗?

    How to not在 Xcode 8 中自动嵌入 Swift 动态库 我尝试过设置ALWAYS EMBED SWIFT STANDARD LIBRARIES为 否 无论如何默认为 否 但它仍然将 Swift 动态库复制到应用程序包中 我正
  • Require.js 延迟加载远程 url

    我的本地文件系统上有一个名为 moment js 的文件 并使用 require js 加载它 如下所示 initialize function require moment function data console log data 但
  • Java中杀死进程的正确方法

    在 Java 中终止进程的最佳方法是什么 获取 PID 然后用以下命令杀死它Runtime exec Use destroyForcibly 这两种方法有什么区别 还有其他解决方案吗 如果您要终止的进程已由您的应用程序启动 那么你可能已经参
  • Tapestry5 无法将视频流传输到 iPad

    我想通过后端带有 Tapestry5 5 3 5 的 HTML5 视频标签将视频流式传输到我的 iPad 通常 服务器端框架甚至不应该在其中发挥作用 但不知何故它确实发挥了作用 无论如何 希望这里有人能帮助我 请记住 我的项目很大程度上是一
  • Kafka 连接:提供了配置 XXX,但不是 AdminClientConfig 中的已知配置

    启动 Kafka Connect 时 我看到很多警告 10 33 56 706 DistributedHerder WARN org apache kafka clients admin AdminClientConfig The conf
  • 如何使用 AngularJS 创建可排序的手风琴?

    I found 用户界面可排序 https github com angular ui ui sortable并使其能够很好地处理简单的列表等 我的应用程序已经使用了ui引导程序 http angular ui github io boot
  • 使用 AirPrint 打印 PDF 会导致输出较小

    我尝试打印 pdfUIPrintInteractionController它加载在UIWevView 好消息是我可以打印 坏消息是打印输出太小 any help would be appreciated IBACTION printPDF
  • 如何将对象传递给 numpy 点函数

    假设我已经定义了我的对象 import numpy as np class myTensor def init self data self data np array data self parent 如何将 myTensor 作为输入传