我可以将我自己的 Python 类与 numpy 或其他矩阵库一起使用吗?

2024-02-19

我希望能够使用 Python 类作为元素进行矩阵运算 - 在本例中,是一个简单的伽罗瓦域 http://en.wikipedia.org/wiki/Galois_field执行。它实现了必要的__add__, __mul__, __sub__ etc.

起初,我认为这应该可以numpy 数组 http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html, 使用dtype参数,但来自the dtype文档 http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html, 看起来dtype不能是任意的 Python 类。例如,我有一堂课Galois它进行模 2 运算:

>>> from galois import Galois
>>> Galois(1) + Galois(0)
Galois(1)
>>> Galois(1) + Galois(1)
Galois(0)

我可以尝试在 numpy 中使用它:

>>> import numpy as np
>>> a = np.identity(4, Galois)
>>> a
array([[1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1]], dtype=object)

但是,如果我对矩阵进行运算,则元素不遵循我的类的方法:

>>> b = np.identity(4, Galois)
>>> a+b
array([[2, 0, 0, 0],
       [0, 2, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 2]], dtype=object)

有什么办法可以让这个与 numpy 一起工作吗?

是否有其他 Python 矩阵库可以对任意类似数字的类进行矩阵运算(包括求逆)?

Update

感谢到目前为止的回答。但我仍然无法像我希望的那样真正使用它。加法和乘法看起来不错,但矩阵求逆却不行。例如,让我们尝试获取AES 逆 S 盒仿射变换矩阵 http://en.wikipedia.org/wiki/Rijndael_S-box#Inverse_S-box来自前向S盒仿射变换矩阵 http://en.wikipedia.org/wiki/Rijndael_S-box#Forward_S-box.

class Galois(object):
    MODULO = 2

    def __init__(self, val):
        self.val = int(val) % self.MODULO

    def __add__(self, val):
        return self.__class__((self.val + int(val)) % self.MODULO)
    def __sub__(self, val):
        return self.__class__((self.val - int(val)) % self.MODULO)
    def __mul__(self, val):
        return self.__class__((self.val * int(val)) % self.MODULO)
    def __int__(self):
        return self.val
    def __repr__(self):
        return "%s(%d)" % (self.__class__.__name__, self.val)
    def __float__(self):
        return float(self.val)

if __name__ == "__main__":
    import numpy as np

    Gv = np.vectorize(Galois)

    a = Gv(np.identity(8)) + Gv(np.eye(8,8,-1)) + Gv(np.eye(8,8,-2)) + Gv(np.eye(8,8,-3)) + Gv(np.eye(8,8,-4)) + Gv(np.eye(8,8,4)) + Gv(np.eye(8,8,5)) + Gv(np.eye(8,8,6)) + Gv(np.eye(8,8,7))
    print np.matrix(a)
    print np.matrix(a).I

结果:

[[Galois(1) Galois(0) Galois(0) Galois(0) Galois(1) Galois(1) Galois(1)
  Galois(1)]
 [Galois(1) Galois(1) Galois(0) Galois(0) Galois(0) Galois(1) Galois(1)
  Galois(1)]
 [Galois(1) Galois(1) Galois(1) Galois(0) Galois(0) Galois(0) Galois(1)
  Galois(1)]
 [Galois(1) Galois(1) Galois(1) Galois(1) Galois(0) Galois(0) Galois(0)
  Galois(1)]
 [Galois(1) Galois(1) Galois(1) Galois(1) Galois(1) Galois(0) Galois(0)
  Galois(0)]
 [Galois(0) Galois(1) Galois(1) Galois(1) Galois(1) Galois(1) Galois(0)
  Galois(0)]
 [Galois(0) Galois(0) Galois(1) Galois(1) Galois(1) Galois(1) Galois(1)
  Galois(0)]
 [Galois(0) Galois(0) Galois(0) Galois(1) Galois(1) Galois(1) Galois(1)
  Galois(1)]]
[[ 0.4  0.4 -0.6  0.4  0.4 -0.6  0.4 -0.6]
 [-0.6  0.4  0.4 -0.6  0.4  0.4 -0.6  0.4]
 [ 0.4 -0.6  0.4  0.4 -0.6  0.4  0.4 -0.6]
 [-0.6  0.4 -0.6  0.4  0.4 -0.6  0.4  0.4]
 [ 0.4 -0.6  0.4 -0.6  0.4  0.4 -0.6  0.4]
 [ 0.4  0.4 -0.6  0.4 -0.6  0.4  0.4 -0.6]
 [-0.6  0.4  0.4 -0.6  0.4 -0.6  0.4  0.4]
 [ 0.4 -0.6  0.4  0.4 -0.6  0.4 -0.6  0.4]]

不是我希望的结果。看起来,对于矩阵求逆,numpy 只是将矩阵转换为浮点数,然后用普通实数进行求逆。


您可以使用object as the dtype,这将允许任意 Python 对象。我认为没有任何方法可以专门化 numpy 数组来只接受一个特定类的 Python 对象。

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

我可以将我自己的 Python 类与 numpy 或其他矩阵库一起使用吗? 的相关文章

  • 使用 pygame 显示 unicode 符号

    我检查了其他答案 但不明白为什么我的代码错误地显示 This is what I currently see https i stack imgur com 8tNIK png 这是关于文本渲染的相关代码 font pygame font
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • Python3.0 - 标记化和取消标记化

    我正在使用类似于以下简化脚本的内容来解析较大文件中的 python 片段 import io import tokenize src foo bar src bytes src encode src io BytesIO src src l
  • 搜索多个字段

    我想我没有正确理解 django haystack 我有一个包含多个字段的数据模型 我希望搜索其中两个字段 class UserProfile models Model user models ForeignKey User unique
  • Keras:如何保存模型或权重?

    如果这个问题看起来很简单 我很抱歉 但是阅读 Keras 保存和恢复帮助页面 https www tensorflow org beta tutorials keras save and restore models https www t
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • Django 的 request.FILES 出现 UnicodeDecodeError

    我在视图调用中有以下代码 def view request body u for filename f in request FILES items body body Filename filename n f read n 在某些情况下
  • Tensorflow 与 Keras 的兼容性

    我正在使用 Python 3 6 和 Tensorflow 2 0 并且有一些 Keras 代码 import keras from keras models import Sequential from keras layers impo
  • 通过索引访问Python字典的元素

    考虑一个像这样的字典 mydict Apple American 16 Mexican 10 Chinese 5 Grapes Arabian 25 Indian 20 例如 我如何访问该字典的特定元素 例如 我想在对 Apple 的第一个
  • 使用 Keras np_utils.to_categorical 的问题

    我正在尝试将整数的 one hot 向量数组制作为 keras 将能够使用的 one hot 向量数组来拟合我的模型 这是代码的相关部分 Y train np hstack np asarray dataframe output vecto
  • Python:IndexError:修改代码后列表索引超出范围

    我的代码应该提供以下格式的输出 我尝试修改代码 但我破坏了它 import pandas as pd from bs4 import BeautifulSoup as bs from selenium import webdriver im
  • 将seaborn.palplot轴添加到现有图形中以可视化不同调色板

    将seaborn人物添加到子图中是usually https seaborn pydata org examples cubehelix palette html创建图形时通过传递 ax 来完成 例如 sns kdeplot x y cma
  • 在 keras 中保存和加载权重

    我试图从我训练过的模型中保存和加载权重 我用来保存模型的代码是 TensorBoard log dir output model fit generator image a b gen batch size steps per epoch
  • 当数据库不是 Django 模型时,是否可以使用数据库中的表?

    是否可以从应用程序数据库中的表获取查询集 该表不是应用程序中的模型 如果我有一个不是名为 cartable 的模型的表 从概念上讲 我想这样做 myqueryset cartable objects all 有没有相对简单的方法来做到这一点
  • 混淆矩阵不支持多标签指示符

    multilabel indicator is not supported是我在尝试运行时收到的错误消息 confusion matrix y test predictions y test is a DataFrame其形状为 Horse
  • 如何与其他用户一起使用 pyenv?

    如何与其他用户一起使用 pyenv 例如 如果我在用户 test 的环境中安装了 pyenv 则当我以 test 身份登录时可以使用 pyenv 但是 当我以其他用户 例如 root 身份登录时如何使用 pyenv 即使你这么做了 我也会s
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • python 线程安全可变对象复制

    Is 蟒蛇的copy http docs python org 2 library copy html模块线程安全吗 如果不是 我应该如何在 python 中以线程安全的方式复制 deepcopy 可变对象 蟒蛇的GIL http en w
  • 使用ssl和socket的python客户端身份验证

    我有一个 python 服务器 需要客户端使用证书进行身份验证 我如何制作一个客户端脚本 使用客户端证书由 python 中的服务器使用 ssl 和套接字模块进行身份验证 有没有仅使用套接字和 ssl 而不扭曲的示例 from OpenSS
  • Apache Beam Pipeline 写表后查询表

    我有一个 Apache Beam Dataflow 管道 它将结果写入 BigQuery 表 然后我想查询该表以获取管道的单独部分 但是 我似乎无法弄清楚如何正确设置此管道依赖性 我编写的新表 然后想要查询 与一个单独的表连接以进行某些过滤

随机推荐

  • Java 构造函数重载

    我是 Java 新手 我无法理解构造函数问题 我已经看过很多教程 但我仍然很难理解为什么我们使用构造函数 无论如何 我的具体问题是 如果我错了 请纠正我 如果我想在我的类中添加多个构造函数 我将编写第一个 第二个将是int类型 在括号内 是
  • Android 离线请求与 Volley

    我想为我的用户提供更好的离线用户体验 因此 我想构建一个Service它存储所有POST DELETE PUT GET没有意义 因为GET没有网络的调用是缓存调用 用户离线执行的请求 并在用户获得互联网连接后立即将其发送到服务器 我希望它是
  • 生成 Google Hangouts 会议 URL

    我希望我的网站能够以编程方式生成环聊网址 这些网址可以转发给特定用户 以便他们加入同一会议 据我了解 这可以通过安排活动来实现Google Calendar 有没有办法在不依赖的情况下做同样的事情Google Calendar 意思是通过A
  • Java8 Stream 编译器消息——局部变量必须是final或有效final

    我有一个小问题 当我写这个 for 循环时 变量i在 f getAnswerScore get i 中带有下划线并带有错误消息 在封闭范围中定义的局部变量 i 必须是最终的或 实际上是最终的 这和流有关系吗 也许流不能在循环中使用 for
  • 我的 Enumerable 类不适用于 Linq 语句,例如 c# 中的 .where

    我希望能够将 Linq 的 where 语句与实现接口 IEnumerable 的 Books 类 Book 列表 一起使用 THE PROBLEM IS HERE IEnumerable list3 bookList Where n gt
  • Visual Studio 2010 Express 限制

    与付费版本相比 VS2010 C Express Edition 有哪些限制 我主要是在研究我可以构建什么样的应用程序 在 VS Express 中我只有 Console Winform 和 DLL 等选项 我读到可以为 Office 程序
  • 如何使用 Java 从 XSD 加载 XML 标签顺序?

    我有个问题 I QUESTION 有没有一种基于 Java 的库 我可以通过它 提前 读取 加载其 XSD 来检索 XML 元素的顺序 二 背景 我正在开发的应用程序应该生成各种类型的 XML 提要 每个 XML 都基于给定的架构 XSD
  • JQuery,setTimeout 不起作用

    我对 JQuery 还很陌生 在让我的 ajax 示例工作的过程中 我因 setTimeout 而陷入停滞 我已经把它分解到应该添加 的地方 每秒到div 相关代码在两个文件中 索引 html div Text div and myCode
  • ASP.NET MVC 路由在虚拟目录中不起作用

    我有一个 asp net mvc 2 应用程序 使用 net 4 0 在虚拟目录中托管时无法正确路由 我有以下简单的路由规则 routes MapRoute Default Route name action URL with parame
  • 如何在 Node.js 中创建附加 writeStream

    当前文档here http nodejs org api html fs writestream 152似乎没有提到任何控制流行为的参数 无论是每次重新创建文件还是只是附加数据 有没有办法创建一个附加数据的 writeStream 有一个创
  • IE 9 jQuery 不设置输入值

    我的问题很简单 我有一个输入文件字段 我想将其限制为仅通过 Jquery 接受 GIF 如果格式错误 请将输入值设置为空白 问题是 在 IE9 上 val 不起作用 有任何想法吗 我的 jQuery input type file chan
  • MSI 安装程序的可执行文件

    我有一个文件夹 其中包含两个 EXE 文件和许多其他文件 如何将其转换为 MSI 安装程序或某种自解压安装程序以便安装Main exe到 Windows 中的程序 第二个EXE文件是因为两个EXE文件之间的通信 我更希望它能够包含 桌面快捷
  • 转义字符串中的双引号

    如何在 Grails 中转义字符串中的双引号 string 12 10 On Going Submission of Made Up Samples 我尝试了很多方法 text artifact text encodeAsJavaScrip
  • 将变量传递给部分,rails 3?

    我有一个这样的循环 然后在我的中间部分 如何访问当前帖子 尝试这个 像这样你就会有一个局部变量post部分内可用
  • 如何将div添加到React Native?

    我刚刚开始我的反应本机应用程序并遇到了一些麻烦 我有一些反应经验 但这似乎没有多大帮助 文本周围的 div 应该是我的应用程序标题 所以我尝试对其进行样式设置 但由于某种原因它会抛出一个错误 指出无法识别 import StatusBar
  • Mercurial - 如何从分叉的父级获取最新更改?

    我接触 Mercurial 已经有一段时间了 现在我已经在 BitBucket 上建立了几个项目 一个是另一个项目的分叉 我已经能够毫无问题地对每个存储库进行更改 但我不明白的一件事是如何使分支与父存储库的更改保持同步 在我分叉了一个存储库
  • Mockito:想要但没有被调用

    我有以下测试方法 MyClass myClass Mockito mock MyClass class Mockito when myClass methodUsedInMethodBeingTested Matchers any MyTy
  • Python pandas:将字符串拆分为多列并从拆分参数中提取列的数据

    我对 Python 和 Pandas 很陌生 在一列中有一些 URL 路径 我想将其分成单独的列 字符串的每个参数都用分号分隔 我知道关于如何通过分隔符将数据拆分为多个列还有许多其他答案 但是在我的示例中 我想动态创建列并从参数本身提取要放
  • 一次为多个结构实现一个特征[重复]

    这个问题在这里已经有答案了 我有特质FooTrait它有很多功能 我也有结构FooStruct and BarStruct并想要实施FooTrait对于两个结构体 其方法完全相同 有没有办法实现FooTrait对彼此而言FooStruct
  • 我可以将我自己的 Python 类与 numpy 或其他矩阵库一起使用吗?

    我希望能够使用 Python 类作为元素进行矩阵运算 在本例中 是一个简单的伽罗瓦域 http en wikipedia org wiki Galois field执行 它实现了必要的 add mul sub etc 起初 我认为这应该可以