具有高级混合索引的 Numpy 子数组分配

2024-03-22

原问题

当我尝试分配数组的某些元素时,我收到一条非常奇怪的错误消息。我使用切片和一组索引的组合。请参阅以下简单示例。

 import scipy as sp

 a = sp.zeros((3, 4, 5))
 b = sp.ones((4, 5))

 I = sp.array([0, 1, 3])

 b[:, I] = a[0, :, I]

这段代码引发了以下问题ValueError:

ValueError:形状不匹配:形状(3,4)的值数组无法广播到形状(3,4)的索引结果

--

跟进

组合使用切片和序列时要小心。整数。正如 github 上指出的:

x = rand(3, 5, 7)

print(x[0, :, [0,1]].shape)
# (2, 5)

print(x[0][:, [0,1]].shape)
# (5, 2)

这就是 numpy 的设计工作方式,但 x[0][:, I] 与 x[0, :, I] 不同,这仍然有点令人困惑。因为这是我想要的行为,所以我选择在代码中使用 x[0][:, I] 。


复制您的代码以进行提问时似乎存在一些错误。

但我怀疑索引存在一个已知问题:

In [73]: a=np.zeros((2,3,4)); b=np.ones((3,4)); I=np.array([0,1])

Make I2 个元素。索引b给出预期的 (3,2) 形状。切片中的 3 行,来自切片的 2 列I索引

In [74]: b[:,I].shape
Out[74]: (3, 2)

但有了 3da我们得到转置。

In [75]: a[0,:,I].shape
Out[75]: (2, 3)

并且赋值会产生错误

In [76]: b[:,I]=a[0,:,I]
...
ValueError: array is not broadcastable to correct shape

它将 2 元素维度定义为I首先,第 3 个元素来自:第二。这是前面讨论过的混合高级索引的情况 - 并且还存在错误问题。 (我得查一下)。

您可能正在使用较新的numpy (or scipy)并收到不同的错误消息。

据记录,使用两个数组或列表进行索引,并将切片放在中间,将切片放在末尾,例如

In [86]: a[[[0],[0],[1],[1]],:,[0,1]].shape
Out[86]: (4, 2, 3)

同样的事情也发生在a[0,:,[0,1]]。但有一个很好的论点认为事情不应该这样。

至于修复,您可以转置值,或更改索引

In [88]: b[:,I]=a[0:1,:,I]

In [90]: b[:,I]=a[0,:,I].T

In [91]: b
Out[91]: 
array([[ 0.,  0.,  1.,  1.],
       [ 0.,  0.,  1.,  1.],
       [ 0.,  0.,  1.,  1.]])

In [92]: b[:,I]=a[0][:,I]

https://github.com/numpy/numpy/issues/7030 https://github.com/numpy/numpy/issues/7030

https://github.com/numpy/numpy/pull/6256 https://github.com/numpy/numpy/pull/6256

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

具有高级混合索引的 Numpy 子数组分配 的相关文章

随机推荐

  • 在管道中获取命令输出,C for Linux

    我需要运行 Linux CLI 命令并从 C 获取其标准输出 我可以使用 pipeline 创建一个管道 然后 fork exec 在调用 exec 之前将子级的标准输出描述符重定向到管道 并从父级中的管道读取 另外我还得伺候孩子 是否有一
  • 如何创建贴纸应用程序并将其发送到 WhatsApp 或任何使用 JS 框架(如 ionic 或 React Native)的即时通讯工具?

    我想使用 Ionic React 本机创建一个混合应用程序 在我的应用程序中 我将创建贴纸 并想将这些贴纸上传到 WhatsUp 我怎样才能做到这一点 Whatsapp 贴纸不是这样工作的 它们不会上传到 Whatsapp 如果您想为 Wh
  • 优秀软件设计和实现的示例[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望这不是重复的 您遇到过的设计和实施最扎实的软件系统 框架 应用程序是什么 似乎 TDD SOLI
  • Scala 展平 String 和 List[String] 的列表

    需要一些有关 Scala 展平的帮助 我有一个清单String and List String 例子 List I can t List do this 预期结果 List I can t do this 我做了很多实验 最紧凑的解决方案是
  • 我可以通过使用多线程更快地分配内存吗?

    如果我创建一个保留 1kb 整数数组 int 1024 的循环 并且希望它分配 10000 个数组 我可以通过从多个线程运行内存分配来使其更快吗 我希望它们在堆中 假设我有一个多核处理器来完成这项工作 我已经尝试过这个 但它降低了性能 我只
  • 未找到成员“HelpURL”的反序列化错误

    获取异常 未找到成员 HelpUrl 在尝试反序列化对象时 下面是我试图执行的代码 Log objectLog Log JsonConvert DeserializeObject JObject Parse msg Body Message
  • 检查列表是否包含 R 中的另一个列表

    我想检查一个列表 或等效的向量 是否包含在另一个列表中 而不是它是否是其子集 让我们假设我们有 r lt c 1 1 s lt c 5 2 t lt c 1 2 5 该函数的行为应如下 is contained r t 1 FALSE as
  • 在 SwiftUI (tvOS) 中获取按钮的 onFocusChange 回调

    The onFocusChange关闭于focusable onFocusChange 修饰符允许我在子视图聚焦时为父视图设置属性 如下所示 struct ContentView View State var text String var
  • 如何在 Windows Azure 中为 Blob 存储配置 CORS 设置

    我在天蓝色存储中创建了几个容器 并将一些文件上传到这些容器中 现在我需要授予对容器 blob 的域级别访问权限 所以我从代码级别进行了尝试 如下所示 CloudStorageAccount storageAccount CloudStora
  • 如何在具有美丽汤的div中选择一个div类?

    我在 div 标签内有一堆 div 标签 div class foo div class bar I want this div div class unwanted Not this div div div class bar Don t
  • 如何在 Python 中获取输出的大小(以字节为单位)

    首先 我要感谢所有帮助过我的人 环境 我在 Windows 8 操作系统中使用 Python v2 7 我正在使用 COM4 通过在 Python 代码中发送一些命令来与机器人对话 我发送命令getversion到机器人并假设获得一堆数据
  • 验证 OpenSSL 中证书的域

    我需要使用 C land OpenSSL 验证 X509 证书的域 我的理解是 该库不会为我执行此操作 并且我必须大致实现以下算法 如果 subjectAlternativeName 扩展的 dnsName 字段存在 则设置name到那个值
  • 如何强制关闭新行上的 HTML 标签?

    在 VS Code 中 我广泛使用 Beautify 但让我感到不安的是 关闭标签总是与 浮动 文本或自关闭标签位于同一行 例如 在 Beautify 之前 div class wrap img src wp content uploads
  • 以编程方式缩小网页

    我们构建了一个在 19 英寸屏幕上完美运行的 Web 应用程序 在 Firefox 上作为 KIOSK 运行 它包含大量图像和围绕这些图像放置的内容文本 在我们将设备更改为 18 5 英寸屏幕之前 它运行得很好 现在 它周围有滚动条 内容和
  • python distutils:访问已编译扩展的名称

    我使用 distutils 编译一个基于 swig 的扩展模块 python setup py build ext产生文件 my module ext cpython 32m so 来自一个 c and a i文件 这个名称似乎取决于所使用
  • 在 JavaScript 中使用全局变量

    我该怎么做呢 我的代码是这样的 var number null function playSong artist title song id alert old number was number var number 10 alert n
  • 如何在grails shiro中使用缓存权限

    每次我打电话subject isPermitted 它向数据库发送一条sql 我怎样才能缓存它 有什么例子吗 谢谢 我阅读了 shiro grails 插件的文档 但无法解决它 数据源 hibernate cache use second
  • 删除 Ruby 中的换行符

    我在删除时遇到问题 n and r标签 当我使用双引号时 它工作正常 否则它会离开 With gsub 如果没有双引号 它根本不起作用 为什么 Remove n delete n result Remove Remove n delete
  • 调用 MVC4 Razor DisplayTemplate,生成 HTML,但未渲染到浏览器

    我有一个迭代集合并调用的视图DisplayFor 对于集合中的每个元素 我需要手动迭代 而不是将集合传递给 DisplayFor 以便告诉模板是否应该在列表中绘制中断 列表中的项目只有两种类型 按它们排序 因此我只需要显示此中断一次 我的模
  • 具有高级混合索引的 Numpy 子数组分配

    原问题 当我尝试分配数组的某些元素时 我收到一条非常奇怪的错误消息 我使用切片和一组索引的组合 请参阅以下简单示例 import scipy as sp a sp zeros 3 4 5 b sp ones 4 5 I sp array 0