结合多维 numpy 数组的切片和广播索引

2023-12-05

我有一个 ND numpy 数组(例如 3x3x3),我想从中提取一个子数组,组合切片和索引数组。例如:

import numpy as np  
A = np.arange(3*3*3).reshape((3,3,3))
i0, i1, i2 = ([0,1], [0,1,2], [0,2])
ind1 = j0, j1, j2 = np.ix_(i0, i1, i2)
ind2 = (j0, slice(None), j2)
B1 = A[ind1]
B2 = A[ind2]

我期望 B1 == B2,但实际上,形状不同

>>> B1.shape
(2, 3, 2)
>>> B2.shape
(2, 1, 2, 3)
>>> B1
array([[[ 0,  2],
        [ 3,  5],
        [ 6,  8]],

       [[ 9, 11],
        [12, 14],
        [15, 17]]])
>>> B2
array([[[[ 0,  3,  6],
         [ 2,  5,  8]]],

       [[[ 9, 12, 15],
         [11, 14, 17]]]])

有人明白为什么吗?知道如何通过仅操作“A”和“ind2”对象来获得“B1”吗?目标是它适用于任何 nD 数组,并且我不必寻找我想要完全保留的维度的形状(希望我足够清楚:))。谢谢!!
- -编辑 - -
更清楚地说,我想要一个“有趣”的功能,这样

A[fun(ind2)] == B1

这是我更接近你的规格,我无法设计出一个可以在不知道的情况下计算正确索引的解决方案A(或者,更准确地说,它的形状......)。

import numpy as np  

def index(A, s):
    ind = []
    groups = s.split(';')
    for i, group in enumerate(groups):
        if group == ":":
            ind.append(range(A.shape[i]))
        else:
            ind.append([int(n) for n in group.split(',')])
    return np.ix_(*ind)

A = np.arange(3*3*3).reshape((3,3,3))

ind2 = index(A,"0,1;:;0,2")
print A[ind2]

较短的版本

def index2(A,s):return np.ix_(*[range(A.shape[i])if g==":"else[int(n)for n in g.split(',')]for i,g in enumerate(s.split(';'))])

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

结合多维 numpy 数组的切片和广播索引 的相关文章

  • 来自 yahoo 的 python lxml etree 小程序信息

    雅虎财经更新了他们的网站 我有一个 lxml etree 脚本 用于提取分析师建议 然而现在 分析师的建议已经存在 但只是以图表的形式出现 你可以看到一个例子这一页 https finance yahoo com quote CSX ana
  • 在 Windows 中安装 IPOPT 求解器以与 pyomo 一起使用

    如何安装 IPOPT 求解器以在 Windows 中与 pyomo 一起使用 我尝试了 pip install ipopt 但收到此错误 错误 为 ipopt 构建轮子失败 我正在使用 Windows 10 和 Python 3 7 4 在
  • 尝试将行附加到按对象分组中的每个组时出现奇怪的行为

    这个问题是关于一个函数在应用于两个不同的数据帧时以意想不到的方式表现的 更准确地说 是 groupby 对象 要么是我遗漏了一些明显错误的东西 要么是 pandas 中存在错误 我编写了以下函数 将一行附加到 groupby 对象中的每个组
  • printf '%s\n' "${array[@]}" 每个数组元素打印一行是否正常?

    在我的 bash 脚本中 我包含了程序所需的一系列其他文件 然后我在帮助说明中打印这些内容 当我使用 printf 进行输出时 我得到了意想不到的结果 我读到 形式 array 通常是首选的扩展默认形式 所以我从它开始 我的数组声明 scr
  • Tastypie:GET 的身份验证和 POST 的匿名

    我使用 Django Tastypie 来管理我的用户集合 是否可以允许匿名用户在 API 中发布 在某个端点创建新用户时 并限制经过身份验证的用户仅获取自己的用户 而不是所有用户 感谢您的帮助 我发现最简单的事情就是对我正在使用的身份验证
  • ibapi nextValidId 并不总是被调用

    我构建了一个小型 ibapi python 应用程序来运行一些策略 同时注意保持与 tws 的连接 如果 tws 处于非活动状态 python 应用程序将启动并等待 并在 tws 启动时连接到 tws 但这是我的问题 nextValidId
  • 对训练和测试数据帧使用相同的标签编码器

    我有 2 个不同的 csv 其中包含训练数据和测试数据 我从这些 train features df 和 test features df 创建了两个不同的数据帧 请注意 测试和训练数据有多个分类列 因此我需要对它们应用 labelEnco
  • Keras ImageDataGenerator 验证分割未从打乱的数据集中选择

    如何将图像数据集随机拆分为训练数据集和验证数据集 更具体地说 validation splitKeras 中的论证ImageDataGenerator函数不是随机地将我的图像分割为训练和验证 而是从未洗牌的数据集中分割验证样本 当指定val
  • 按周将对象数组拆分为组

    我有一个包含这样的数据的对象数组 date 01 01 2017 00 00 00 dataField1 dataField2 date 01 02 2017 00 00 00 dataField1 dataField2 date 01 1
  • 如何使用 BeautifulSoup 排除表中的某些行?

    我已经从表格中获得了所需的数据 但不想要各个玩家统计数据之间的缩写 Rk Pos Name 等 如何在保留所需数据的同时排除这些数据 包含缩写的行被归类为 thead 但我不知道如何使用该信息来跳过它 我知道玩家的数据都被压缩在一起 但现在
  • 从 FTP 服务器上的 ZIP 存档读取文件,无需下载到本地系统

    我在 FTP 服务器上的目标文件是 ZIP 文件 CSV 位于更远的两个文件夹中 我如何才能使用 BytesIO 让 pandas 读取 csv 而无需下载它 这是我到目前为止所拥有的 ftp FTP FTP SERVER ftp logi
  • python 使用曲面图和第四个变量的滑块可视化 4d 数据

    如何使用前 3 个变量和第四个变量的 3 维曲面图作为滑块来可视化 4 维数据 从 csv 文件加载 集 我写了一个非常小的示例 重点介绍了实现此目标的方法 import numpy as np import matplotlib pypl
  • PHP 数组比较

    如何比较两个数组 例如我有array a b c and array a c b 当它们进行比较时 它会返回 true 但如果其中一个字母没有在其中之一中找到 它将返回 false 顺序并不重要 在比较之前 您需要将两个数组的内容调整为相同
  • 如何在Python中生成0-1矩阵的所有可能组合?

    如何生成大小为 K N 的 0 1 矩阵的所有可能组合 例如 如果我取 K 2 和 N 2 我会得到以下组合 combination 1 0 0 0 0 combination 2 1 0 0 0 combination 3 0 1 0 0
  • 重置Keras模型的所有权重

    我希望能够重置整个 Keras 模型的权重 这样我就不必再次编译它 编译模型目前是我的代码的主要瓶颈 这是我的意思的一个例子 import tensorflow as tf model tf keras Sequential tf kera
  • 由 asyncio.new_event_loop 创建的事件循环挂起

    以下代码只是挂起而不打印任何内容 import asyncio async def foo loop print foo loop stop loop asyncio new event loop asyncio ensure future
  • 如何向 Iron Python 添加模块?

    我一直在尝试使用 C Visual Studio 执行以下 Python 代码 graphcreater py 我通过 NuGet 包管理器添加了 IronPyton 2 7 7 和 IronPython StdLib 2 7 7 一旦我运
  • Python 生成器每次调用都会产生相同的值

    我希望这个生成器生成列表中每个连续值的余弦 但每次都得到相同的值 import math angles range 0 361 3 calculate x coords def calc x angle list for a in angl
  • pandas 数据帧和聚合中的行明智排序

    我在 pandas dataframe df 中有一个表 col1 col2 count 12 15 3 13 17 5 1 36 4 15 12 7 36 1 4 等等 我想要的是将 12 和 15 和 15 和 12 等计算值视为相同
  • 在 AWS ec2 实例上使用“sudo pip”时出现错误

    我正在尝试在 aws ec2 实例上运行一个小型 python 代码 需要 pytz 和其他一些包 当我尝试安装 pytz 时 出现一些错误 ec2 user ip 172 31 28 178 pip install pytz Collec

随机推荐