与动态 ndarray 作斗争

2023-12-26

我是 MATLAB 用户。 将以下 MATLAB 脚本移植到 python 的最简单方法是什么

a = []
for i=1:10
    for j=1:10
        a(i,j) =  i*j
    end
end

问题是关于动态使用 np.ndarrays。在 MATLAB 中,我可以在不知道其大小的情况下将 a 初始化为通用 ndarray(通过 a=[]),然后使用显式索引 a(i,j)。 在Python中有.append方法,但是当使用ndarrays时它让我感到困惑,因为它需要首先打包行的元素,然后将行打包在一起,或者类似的东西。我更喜欢显式索引。这是否可以与动态数组一起完成,或者可以仅使用固定大小的数组来完成?

Thanks!


运行 MATLAB 时查看显示

a =  1
a =
   1   2
a =
   1   2   3
a =
   1   2   3   4
.... (so on for 100 iterations)

在八度中我可以这样做:

>> i=1:10
i =

    1    2    3    4    5    6    7    8    9   10

>> j=(1:10)'
j =

    1
    2
    3
    4
    5
    6
    7
    8
    9
   10

>> a=i+j
a =

    2    3    4    5    6    7    8    9   10   11
    3    4    5    6    7    8    9   10   11   12
    4    5    6    7    8    9   10   11   12   13
    5    6    7    8    9   10   11   12   13   14
    6    7    8    9   10   11   12   13   14   15
    7    8    9   10   11   12   13   14   15   16
    8    9   10   11   12   13   14   15   16   17
    9   10   11   12   13   14   15   16   17   18
   10   11   12   13   14   15   16   17   18   19
   11   12   13   14   15   16   17   18   19   20

这利用了广播,这是一个借用自 numpy 的概念

In [500]: i=np.arange(1,11)
In [501]: a = i[:,None] + i
In [502]: a
Out[502]: 
array([[ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11],
       [ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12],
       [ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13],
       [ 5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
       [ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
       [ 7,  8,  9, 10, 11, 12, 13, 14, 15, 16],
       [ 8,  9, 10, 11, 12, 13, 14, 15, 16, 17],
       [ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])

这是最佳实践 - 在 numpy 中,我敢说 MATLAB 和 Octave。

但如果你必须使用迭代做类似的事情

In [503]: a=np.zeros((10,10),int)
In [504]: for i in range(10):
     ...:     for j in range(10):
     ...:         a[i,j]=i+j

或者使用完整的 python 列表迭代:

In [512]: alist = []
In [513]: for i in range(10):
     ...:     sublist=[]
     ...:     for j in range(10):
     ...:         sublist.append(i+j)
     ...:     alist.append(sublist)
     ...:     
In [514]: alist
Out[514]: 
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
 [2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
 [3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
 [4, 5, 6, 7, 8, 9, 10, 11, 12, 13],
 [5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
 [6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
 [7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
 [8, 9, 10, 11, 12, 13, 14, 15, 16, 17],
 [9, 10, 11, 12, 13, 14, 15, 16, 17, 18]]
In [515]: np.array(alist)
Out[515]: 
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10],
       [ 2,  3,  4,  5,  6,  7,  8,  9, 10, 11],
       [ 3,  4,  5,  6,  7,  8,  9, 10, 11, 12],
       [ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13],
       [ 5,  6,  7,  8,  9, 10, 11, 12, 13, 14],
       [ 6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
       [ 7,  8,  9, 10, 11, 12, 13, 14, 15, 16],
       [ 8,  9, 10, 11, 12, 13, 14, 15, 16, 17],
       [ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]])

但我可以生成alist更紧凑地

alist=[[i+j for i in range(10)] for j in range(10)]

当您构建列表列表时,请确保子列表都具有相同的长度 - 否则您会带着问题回到SO。

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

与动态 ndarray 作斗争 的相关文章

随机推荐

  • 从代码隐藏提交表单

    我在 c asp net 应用程序上实现功能时遇到问题 我有一个带有 RadioButtonList 和提交按钮的表单 RadioButtonList 生成于Page Load 从我从数据库检索的对象列表中 如果列表中只有 1 个对象 我想
  • SQL 和 where 子句中的 NULL 值

    所以我有一个简单的查询 返回产品列表 SELECT Model CategoryID FROM Products WHERE Model 010 00749 01 这返回 010 00749 01 00000000 0000 0000 00
  • 如何在 Haskell 中实现二进制数

    我看到了以下教堂数字的数据构造函数 data Nat Zero Succ Nat deriving Show 但这是一元数 我们如何以这种方式在 Haskell 中实现二进制数的数据构造函数 我已经尝试过这个 data Bin Zero O
  • React-Native WebView 嵌入 YouTube 视频在 Android 中没有全屏选项

    我正在尝试将 YouTube 视频嵌入到我的 React Native 应用程序中 它工作正常 但我无法获得这些视频的全屏按钮 功能 这是我的代码
  • 您已经拥有当前的 iOS 开发证书或待处理的证书请求

    我安装了新的 OSX High Siera 问题 所有已安装的证书均已删除 所以我使用本地计算机签名证书创建了新的分发证书 并将其下载并安装到计算机中 当我运行项目或它给出错误 我尝试了 stackOverflow 中找到的所有步骤 但无法
  • C# 中的 JOptionPane 等效项?

    在 Java 中 标准 Swing 库中有一个有用的类 称为 JOptionPane 它提供了一堆预制但可自定义的窗口 用于显示消息和获取 简单 用户输入 我知道有 MessageBox Show 可以在 C 中向用户显示 是 否 取消 类
  • 如何在项目范围内使用 Kotlin ExperimentalUnsignedTypes (AndroidStudio)

    我正在尝试使用 ExperimentalUnsignedTypes在我的 Android Studio 项目中 看来我必须把它放在任何地方 所以我宁愿在项目范围内设置它 文档 https kotlinlang org api latest
  • 如何在 git 中执行“hg mv --after”?

    我在 git 之外重命名了一些文件并对其进行了大量修改 当我跑步时git diff index M name status HEAD我只看到 4 个文件被重命名 移动 而实际上应该更多 我知道我可以使用 Mercurial 记录事后移动hg
  • 如何自动安装 Xcode?

    我正在尝试编写一个 shell 脚本 将我们所有的开发工具和依赖项安装到干净的 OSX 机器上 有谁知道自动化安装 Xcode 的最佳方法吗 我这样做是为了 记录开发环境 加快新开发人员的入职流程 遵循一切自动化原则 全自动 Xcode 安
  • 在 tkinter 打开文件弹出窗口中指定“此电脑”作为初始目录

    我正在编写一个 python 脚本 该脚本使用 tkinter 使用代码打开 打开文件弹出窗口 root filename filedialog askopenfilename initialdir title Select file fi
  • Android Studio 将 ProGuard 映射文件保存在哪里?

    在Android Studio中 编译签名的APK后生成的ProGuard映射文件在哪里 我不确定它是否不起作用或者我是否只是忘记了文件路径 并且我的强制性 Google Stack Overflow 搜索没有回答这个问题 它应该位于bui
  • 不安全的 C# 和 2D 渲染指针,是好是坏?

    我正在编写一个 C 控件 它包装 DirectX 9 并提供一个简化的接口来执行 2D 像素级绘图 NET 要求我将此代码包装在不安全代码块中 并使用允许不安全代码选项进行编译 我锁定整个表面 然后返回指向锁定的内存区域的指针 然后我可以使
  • 客户端和服务器无法通信,因为它们不具备 Windows Server 2008 Web 上的通用算法

    我正在开发 ASP Net WebForms 应用程序 我们正在使用PayFort 的启动 API https github com payfort start net用于付款流程 该应用程序在我们的本地计算机 Windows 10 上运行
  • 如何允许用户安装 MSI 文件的多个副本?

    我希望允许我的用户在一台 PC 上安装我的应用程序的多个副本 一种用于测试目的 一种用于生产系统 安装是直接在 Visual Studio 2005 中创建的 MSI 文件 有什么方法可以启用此功能吗 我准备使用其他工具来生成安装 甚至使用
  • 新项目中的源代码控制

    我正在工作中自己开发一个项目 我知道最终它需要存储在我们的 SVN 中 我的问题是 如果我从头开始 我该如何将其存储在 SVN 中 我是否只提交稳定的完整构建 或者当我觉得某个模块达到某个里程碑时才提交 尽早并经常做出承诺 这可以最大限度地
  • 如何向 Unity 2019 添加 JavaScript 支持?

    我几年前开发了一款游戏 现在决定改进游戏并再次开始下载 Unity 升级 Unity 后 我发现 Unity 不知道所有 JS 文件 并且已将它们与对象分离 有什么解决方案可以解决该问题并再次向 Unity 添加 JS 支持吗 2017年8
  • Glassfish / PostgreSQL 表,具有生成 com.sun.jersey.spi.inject.Errors 的复合(两部分)主键

    我有一个 PostgreSQL 表testtable具有两部分主键 ID1bigint 类型 ID2bigint 类型 和带有时间戳的非键字段 我正在尝试使用 来自数据库的新 RESTful Web 服务 向导生成 RESTful Web
  • 如何在java中使用RabbitMQ实现RPC机制

    如何在java中使用RabbitMQ实现RPC机制 生产者和消费者 我也访问官方网站http www rabbitmq com api guide html rpc http www rabbitmq com api guide html
  • golang中无法通过ObjectId获取mongodb记录

    我尝试使用以下代码通过 ObjectId 获取 mongodb 记录 但不断获取未找到 by err Error 以下是我的 mongo 集合示例 id ObjectId 5a2a75f777e864d018131a59 callDate
  • 与动态 ndarray 作斗争

    我是 MATLAB 用户 将以下 MATLAB 脚本移植到 python 的最简单方法是什么 a for i 1 10 for j 1 10 a i j i j end end 问题是关于动态使用 np ndarrays 在 MATLAB