编写接受一维和二维 numpy 数组的函数?

2024-03-28

我的理解是 numpy 中的一维数组可以解释为面向列的向量或面向行的向量。例如,具有形状的一维数组(8,)可以被视为形状的二维数组(1,8)或形状(8,1)取决于上下文。

我遇到的问题是,我编写的用于操作数组的函数往往在二维情况下可以很好地泛化以处理向量和矩阵,但在一维情况下则不太好。

因此,我的函数最终会执行如下操作:

if arr.ndim == 1:
    # Do it this way
else:
    # Do it that way

甚至是这个:

# Reshape the 1-D array to a 2-D array
if arr.ndim == 1:
    arr = arr.reshape((1, arr.shape[0]))

# ... Do it the 2-D way ...

也就是说,我发现我可以概括代码来处理二维情况(r,1), (1,c), (r,c),但不是没有分支或重塑的一维情况。

当函数对多个数组进行操作时,它会变得更加丑陋,因为我会检查并转换每个参数。

所以我的问题是:我是否错过了一些更好的习语?我上面描述的模式对于 numpy 代码来说是常见的吗?

另外,作为 API 设计原则的相关问题,如果调用者将一维数组传递给某个返回新数组的函数,并且返回值也是一个向量,那么重塑二维向量是否是常见的做法(r,1) or (1,c)返回一维数组或简单地记录该函数无论如何都返回一个二维数组?

Thanks


我认为一般来说 NumPy 函数需要形状数组(r,c)对一维数组没有特殊考虑。相反,他们希望用户传递一个形状数组(r,c)确切地说,或者让用户传递一个一维数组广播 http://www.scipy.org/EricsBroadcastingDoc达到形状(r,c).

如果你向这样的函数传递一个形状的一维数组(c,)它将广播形成(1,c),因为广播在左侧添加了新轴。还可以广播塑造(r,c)对于任意的r(取决于它与哪个其他数组组合)。

另一方面,如果你有一个一维数组,x,形状(r,)你需要它来传播形状(r,c),那么 NumPy 期望用户传递一个形状数组(r,1)因为广播不会为您添加右侧的新轴。

为此,用户必须通过x[:,np.newaxis]而不仅仅是x.


关于返回值:我认为最好总是返回一个二维数组。如果用户知道输出的形状(1,c),并且想要一个一维数组,让她切掉一维数组x[0]她自己。

通过使返回值始终具有相同的形状,可以更容易地理解使用此函数的代码,因为输入的形状并不总是立即显而易见。

此外,广播模糊了一维形状数组之间的区别(c,)和一个二维形状数组(r,c)。如果您的函数在输入一维输入时返回一个一维数组,在输入二维输入时返回一个二维数组,那么您的函数会严格区分而不是模糊区分。从风格上来说,这让我想起检查if isinstance(obj,type),这违背了鸭子类型的原则。如果没有必要,就不要这样做。

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

编写接受一维和二维 numpy 数组的函数? 的相关文章

  • 帮助需要在可选条件下编写正则表达式[关闭]

    我有一个日志文件包含如下内容 log Using data from yyyy mm dd 2011 8 3 0 files queued for scanning Warning E test H ndler pdf File not F
  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • 无法在 mysql 表中的值中使用破折号(-)[重复]

    这个问题在这里已经有答案了 我一直在尝试从 python 将数据插入 MYSQL 表 我的sql表中的字段是id token start time end time和no of trans 我想存储使用生成的令牌uuid4在令牌栏中 但由于
  • 如何在 Django 管理中以表格格式显示添加模型?

    我刚刚开始使用 Django 编写我的第一个应用程序 为我的家庭设计的家务图表管理器 在本教程中 它向您展示了如何添加相关对象 http docs djangoproject com en dev intro tutorial02 cust
  • 如何在Python中的BeautifulSoup4中使用.next_sibling时忽略空行

    由于我想删除 html 网站中重复的占位符 因此我使用 BeautifulSoup 的 next sibling 运算符 只要重复项位于同一行 就可以正常工作 参见数据 但有时它们之间有一个空行 所以我希望 next sibling 忽略它
  • 十六进制数的按位异或

    我们如何在 Python 中对十六进制数进行异或 例如 我想要异或 ABCD and 12EF 答案应该是 B922 我使用了下面的代码 但它给出了错误的结果 xor two strings of different lengths def
  • Python 字典 - 在 2 个字符的字符串中查找第二个字符,该字符产生最小值

    我想提交密钥的第一部分并返回该密钥的剩余部分 以最小化值 并从第一部分开始 例如 d ab 100 ac 200 ad 500 如果我要进去 a I would like to return b min d s s for s in d i
  • Pandas Pivot_Table :非数字值的行计算百分比

    这是我在数据框 df 中的数据 Document Name Time SPS2315511 A 1 HOUR SPS2315512 B 1 2 HOUR SPS2315513 C 2 3 HOUR SPS2315514 C 1 HOUR S
  • 属性错误:类型对象“图像”没有属性“打开”

    Exception in Tkinter callback Traceback most recent call last File C Python34 lib tkinter init py line 1482 in call retu
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 如何在matplotlib中基于x轴更改直方图颜色

    我有根据 pandas 数据框计算出的直方图 我想根据 x 轴值更改颜色 例如 If the value is 0 the color should be green If the value is gt 0 the color shoul
  • 如何在 Python 中执行相当于预处理器指令的操作?

    有没有办法在 Python 中执行以下预处理器指令 if DEBUG lt do some code gt else lt do some other code gt endif There s debug 这是编译器预处理的特殊值 if
  • PyQt - 如何检查 QDialog 是否可见?

    我有个问题 我有这个代码 balls Ball for i in range 1 10 因此 当我说 Ball 时 这将在 QDialog 上绘制一个球 然后当这完成后 我正在移动球QDialog无限循环中 我想说类似的话while QDi
  • python中打印字符串的长度

    有没有什么方法可以找到 即使是最好的猜测 Python中字符串的 打印 长度 例如 potaa bto 是 8 个字符len但 tty 上只打印 6 个字符宽 预期用途 s potato x1b 01 32mpotato x1b 0 0mp
  • 如何使用数据库在 Django 中的应用程序之间交换数据?

    我正在使用 Django 在网络上工作 我创建了 2 个应用程序 第一个用于客户端注册并将其数据添加到数据库 第二个应用程序供用户访问和查看交互界面 这个想法是使用第二个应用程序从数据库中的客户端获取数据 并使用它向用户显示一些信息 我的问
  • 如何将 pytest 装置与 django TestCase 一起使用

    我如何在TestCase方法 类似问题的几个答案似乎暗示我的例子应该有效 import pytest from django test import TestCase from myapp models import Category py
  • Jupyter Notebook 中的多处理与线程

    我试图测试这个例子here https ipywidgets readthedocs io en stable examples Widget 20Asynchronous html将其从线程更改为多处理 在 jupyter Noteboo
  • Jinja2中获取请求参数

    如何检索请求参数a在 Jinja2 模板中 http foo bar a 1 我这个答案有点晚了 但其他解决方案并没有真正考虑到您对 Flask 的使用 事实上 您将 Flask 与 Jinja2 一起使用 这使得您的情况与其他框架有点不同
  • 如何让你的精灵在pygame中跳跃

    目前我已经制作了一个平台游戏 可以左右移动我的角色 他从地上开始 关于如何让他跳的任何想法 因为我不明白 目前 如果我按住向上键 我的玩家精灵将连续向上移动 或者如果我按下它 我的玩家精灵将向上移动并保持向上 我想找个办法远离他 让我重新跌
  • Selenium Python 使用代理运行浏览器[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个非常简单的脚本 该脚本从 txt 文件获取代理 不需要身份验证 并用它打开浏览器 然后沿着代理列表循环此操作一定次数 我确实知道如何打开 txt 文件并使用它 我的主要问题是让代理正常工作 我见

随机推荐

  • 会话 cookie 未设置

    无法让 php 的 SESSION 在我的本地计算机上工作 它在实时服务器上工作正常 但在本地计算机上无法工作 我尝试过在 Windows 上使用 apache 和 php 在 Mac 上使用 apache 和 php 在 debian 上
  • 如何将参数传递给 selectExpr? SparkSQL-Scala

    当您有数据框时 您可以使用以下方法添加列并填充其行selectExprt 像这样的事情 scala gt table show idempr tipperrd codperrd tipperrt codperrt OlcM h 999999
  • 如何使用mysql和php获取排序行的位置

    我有一个存储高分以及玩家 ID 的表 我希望能够通过玩家 ID 提取记录 然后获取他们的分数在表中的排名或位置 意思是 基本上我希望能够说 你处于第 N 位置 纯粹基于玩家得分与所有其他得分的比较 例如 如果我位于第 46 位 那么对我来说
  • Chrome 更新 73 - Materialise CSS JS 触发错误

    在最新的 Chrome Update 73 之后 Materialize CSS 0 100 2 的日期选择器 时间选择器和下拉菜单不再工作 当您点击它时它会闪烁 然后消失 知道如何解决这个问题吗 我遇到过同样的问题 现在我做了一些更改以使
  • 如何使用 write 系统调用将 int 写入文件并完全按照写入方式读取它们?

    如何使用 UNIX 的 write 系统调用将 int float 或其他类型写入文件 我想这样做而不使用任何 lib 函数 例如fprintf or fwrite 我想使用文件描述符而不是FILE 再次打开后 文件必须完全按照写入的方式读
  • Java:同步实用程序

    我问这个纯粹是为了确定实施问题类的价值 您是否知道 Java 实用程序类采用非同步实例 使用反射来调查该实例 并返回 包装 在同步调用中的输入实例 即 为任何实例创建同步委托类的工厂 我喜欢乔恩 斯基特的回答 它只见树木而不见森林 但要回答
  • 将枚举序列化为从 Azure Function 返回的 JSON 中的字符串

    有没有办法配置 Azure Functions 如何将对象序列化为 JSON 作为返回值 我想使用字符串而不是整数作为枚举值 例如 给定以下代码 public enum Sauce None Hot public class Dish Js
  • 如何从vb.net代码向水晶报表传递参数

    我创建了一个水晶报告 交叉表 我没有使用任何数据集 而是使用水晶报表中的向导从我的数据库架构中调用过程 给出的提供程序是 Oracle 的 Microsoft OLEDB 提供程序 之后我提供了我的数据库凭据 即架构 用户名 密码 并选择了
  • 如何将 HTML 元素记录为 JavaScript 对象?

    使用 Google Chrome 如果您console log一个对象 它允许您检查控制台中的元素 例如 var a foo bar whiz bang console log a 这打印出来Object可以通过单击旁边的箭头进行检查 但是
  • window.scrollTo 在 Internet Explorer 11 中不起作用

    我希望在启动页面时滚动条默认位于顶部 但是下面的代码在 chrome 中工作正常 但在 IE11 中不行 如果我尝试调试脚本 滚动条位于顶部 document ready function window scrollTo 0 0 我在网上尝
  • Android Seekbar 有两个拇指

    这个问题的变体可以在互联网上找到 但没有答案 我想要一个带有两个拇指范围选择的搜索栏 我愿意自己编程 但缺乏 Android 经验 有人可以给我一些关于从哪里开始的指示吗 我的意思是 我知道我必须扩展一些东西 可能是进度条 但是我应该如何去
  • AngularJS 绑定中的数学函数

    有没有办法在 AngularJS 绑定中使用数学函数 e g p The percentage is Math round 100 count total p 这个小提琴显示了问题 http jsfiddle net ricick jtA9
  • 检查字符串是否包含整数

    您知道可以检查字符串是否包含整数的函数吗 我期望它的工作方式如下 holds int 23 should return true holds int 2 3 should return false holds int qwe should
  • 仅使用 Perl 核心运行单个脚本来自动安装缺少的模块的快速方法是什么?

    我继承了一个应该能够部署到其他服务器的项目 该项目有许多简单的模块依赖项 但这些依赖项可能并不存在于所有目标计算机上 因此 我希望能够运行一个命令行脚本来检查安装了哪些 Perl 模块 并尝试通过 CPAN 自动安装缺少的模块 由于这应该是
  • C# 套接字编程入门 - 最佳实践

    我在这里看到了很多关于套接字的资源 我相信他们都没有涵盖我想知道的细节 在我的应用程序中 服务器执行所有处理并向客户端发送定期更新 这篇文章的目的是涵盖开发套接字应用程序时所需的所有基本思想并讨论最佳实践 以下是您在几乎所有基于套接字的应用
  • 如何模拟Android操作系统卸载后台应用程序?

    出于测试目的 我需要轻松地重现 Android 系统决定保存状态并终止后台应用程序时的情况 就像通常出于内存优化目的所做的那样 事实上 我还需要测试当用户切换回这样一个已删除进程时的恢复过程 直接的方法是打开应用程序 然后打开更多其他任务
  • 如何让点击日历图标时弹出日历?

    我正在研究website http ferhan ferohost com 我想在点击日历图标时弹出日历 我用来放置的 HTML 代码开始日期 and End Date are div class dates div class start
  • Perl 6 规则中 .parse 锚点还是 :sigspace 首先?

    我有两个问题 我表现出的行为是否正确 如果是 它是否记录在某处 我在玩语法TOP方法 宣布为rule 它意味着字符串的开头和结尾锚点以及 sigspace grammar Number rule TOP d my strings 137 1
  • 异常:AXIS 引擎找不到要调用的目标服务! targetService 是 SecurityDepositServiceImpl

    我是 Web 服务新手 我使用 eclipse Bottom Up java Bean service 在现有项目中创建了一个 Web 服务 服务器是 Tomcat 6 Spring Framework 2 5 而不是使用 Maven 和
  • 编写接受一维和二维 numpy 数组的函数?

    我的理解是 numpy 中的一维数组可以解释为面向列的向量或面向行的向量 例如 具有形状的一维数组 8 可以被视为形状的二维数组 1 8 或形状 8 1 取决于上下文 我遇到的问题是 我编写的用于操作数组的函数往往在二维情况下可以很好地泛化