如何使用 3d 数组和 2d 数组 numpy 进行掩码

2023-11-29

如何使用 1d 数组从 3d 数组中选择一组元素。

#These are my 3 data types
# A = numpy.ndarray[numpy.ndarray[float]]
# B1 = numpy.ndarray[numpy.ndarray[numpy.ndarray[float]]]
#B2=numpy.ndarray[numpy.ndarray[numpy.ndarray[float]]]
#I want to choose values from A based on values from B1 in the B2

这是我尝试过的,但它返回了所有False:

A2[i]=image_values[updated_image_values==initial_means[i]]

Example:

A=[[1,1,1][2,2,2]]
B=[[[1,1,1],[2,3,4]],[[2,2,2],[1,1,1]],[[1,1,1],[2,2,2]]]
B2=[[[2,2,2],[9,3,21]],[[22,0,-2],[-1,-1,1]],[[1,-1,-1],[10,0,2]]]

#A2 is calculated as the means of the B2 values that correspond 
#to it's value according to B

所以,要计算A2我们使用检查 B2 中的值等于 A 中的值。因此,对于第一个索引A[0], B[0][0],B[1][1] and B[2][0]等于A[0]。因此对于A2[0],我们得到相应的值B in B2并使用它们来计算每个指数的平均值:

#A2[0][0]=(B2[0][0][0]+B2[1][1][0]+B2[2][0][0]) /3 = 0.67

#A2[1][2]=(B2[1][0][2]+B2[2][1][2]) /2 = 0

#After doing this for every A2 value, A2 should be:

A2=[[0.67,0,0.67],[16,0,0]]

这是一种矢量化方法np.add.reduceat -

idx = np.argwhere((B == A[:,None,None]).all(-1))
B2_indexed = B2[idx[:,1],idx[:,2]]
_,start, count = np.unique(idx[:,0],return_index=1,return_counts=1)
out = np.add.reduceat(B2_indexed,start)/count.astype(float)[:,None]

或者,我们可以通过避免创建来节省一点内存4D面具与一个3D掩码代替获取idx,就像这样-

dims = np.maximum(B.max(axis=(0,1)),A.max(0))+1
A_reduced = np.ravel_multi_index(A.T,dims)
B_reduced = np.ravel_multi_index(B.T,dims)
idx = np.argwhere(B_reduced.T == A_reduced[:,None,None])

这是另一种单循环方法 -

out = np.empty(A.shape)
for i in range(A.shape[0]):
    r,c = np.where((B == A[i]).all(-1))    
    out[i] = B2[r,c].mean(0)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 3d 数组和 2d 数组 numpy 进行掩码 的相关文章

随机推荐

  • 用户通知未显示(iOS 10)

    我无法开火UserNotification在 iOS 10 中 我将从我的代码开始 BOOL application UIApplication application didFinishLaunchingWithOptions NSDic
  • 是否可以在 GDB 调试器中“跳转”/“跳过”?

    在 GDB 中调试时是否可以跳转到代码 可执行文件中的某个位置 地址 假设我有类似以下内容的内容 int main caller f1 f1 breakpoint f2 want to skip f2 and jump caller f2
  • 无法在 bash 中执行双括号中的命令

    为了保持一致 我尝试在所有 if 语句中使用双括号 然而 当我要检查我想要运行的命令的返回值时 我确实遇到了问题 在测试了几种创建 if 语句的方法之后 我发现只有没有括号才能执行命令 以下不起作用 if command then echo
  • Rustc/LLVM 为 aarch64 生成错误代码,opt-level=0

    我有两个文件被组装 编译 链接到简约内核中 start s set CPACR EL1 FPEN 0b11 lt lt 20 set BOOT STACK SIZE 8 1024 global boot stack global start
  • geom_bar(aes = ) 和position_dodge(width = ) 中的“width =”以什么单位呈现?

    我想在其中一个躲避的栏上专门放置一些东西 我怎样才能做到这一点 在下面的示例中 我想在条形图的 cat3 组中的 A3 上专门分层一些内容 我知道 cat3 的 x 3 但由于闪避宽度和条宽度的相互依赖性 似乎很难瞄准该条 有没有可以用来计
  • Gradle Java 应用程序的 Proguard 示例

    我是混淆新手 并试图弄清楚如何混淆使用 gradle 创建的 java 应用程序 这个想法是混淆 gradle 构建后创建的可运行 jar 这是 gradle 文件 plugins Apply the java plugin to add
  • 如何在 C# 中连接 WAV 文件

    我有 2 个 wav 文件 我想将它们连接成一个带有两个音轨的文件 是否有任何用于该任务的 API 或 NET 中的一些内置命令 我可以使用它们以某种天才的方式来使该任务成为可能 非常感谢您的帮助 如果我没有记错的话 您可以将第二个文件中的
  • 未来的建造者会在每个设定状态上不断重建

    我正在构建一个使用 api 的应用程序 并且我正在使用 future 构建器来获取数据 但问题是当状态更改时它会重建 我想防止这种情况发生 Thanks 尝试使用这个 class Example extends StatefulWidget
  • 将 XmlHttpRequest 解析为 XmlListModel

    我想将检索到的 xmlHttpRequest 对象放入 XMLListModel 中 我正在使用 qml 主要目标是评估我获得的 xml 并显示列表中的条目 如果有更好的方法 请告诉我 我在这里找到了一个用于分析 xml 的 解决方案 ht
  • Android Studio无法加载项目

    更新最新的Android studio后 我无法再加载项目了 并且错误消息 无法加载项目 com intellij ide plugins PluginManager StartupAbortedException 致命 初始化 com i
  • 将 .XLSX 转换为 Google Sheet 并移动转换后的文件的脚本

    我知道可以使用脚本和驱动 API 将 Excel 文件转换为 Google Sheets 但我正在寻找脚本来转换 Excel 工作表并将转换后的文件移动到其他文件夹 所以需要的步骤如下 将 Excel xls xlsx 从文件夹 A 转换为
  • 即使我运行程序时也获得不同的线程顺序

    有人可以告诉我线程开始执行的顺序吗 我写了下面的代码 class NewThread implements Runnable Thread t NewThread creating a second thread t new Thread
  • 值类中的验证

    SIP 15 意味着可以使用值类别来定义新的数字类别 例如正数 是否可以在没有构造函数的情况下编写底层 gt 0 的约束 而不必调用单独的方法来验证约束 即 创建此类的有效实例是简洁的 如果值类具有构造函数的概念 那么这可能是进行如下验证的
  • Laravel 资源 URL 忽略 https

    我在模板中使用以下代码来加载 CSS 文件 如果我在本地计算机上通过 https 查看页面 则指向 app css 文件的链接也是 https 但是在我的实时服务器上 这种情况不会发生 如果你查看现场直播通过 https 并查看源代码 您可
  • 延续和回调有什么区别?

    我一直在浏览整个网络 寻找有关延续的启示 令人难以置信的是 最简单的解释竟然能让像我这样的 JavaScript 程序员完全困惑 当大多数文章用Scheme 中的代码解释延续或使用monad 时尤其如此 现在我终于认为我已经理解了延续的本质
  • 如何在 pyspark 数据框中创建连续数字列?

    我想创建带有连续数字的列pyspark从指定编号开始的数据帧 例如 我想添加列A到我的数据框df这将从5到我的数据帧的长度 增加一 所以5 6 7 length df 一些简单的解决方案使用pyspark方法 您可以使用以下方法执行此操作r
  • 如何从 php API 运行 casperJS 脚本

    我有一个 casperJS 脚本 通过命令行运行时会返回 JSON 我想最好在 PHP 中创建一个 API 它在命令行 casperJS Sample js 中运行脚本并返回 JSON 作为结果 您可以使用php casperjs库是一个简
  • 将双空格替换为单空格

    如何使用 C 将双空格替换为单空格 ex 1 2 3 4 5 gt 1 2 3 4 5 这就是我到目前为止所做的 int tmain int argc TCHAR argv string line ifstream myfile myFil
  • 使用 C# 或经典 ASP (VBScript) 从 PDF 中提取文本的好方法是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 有没有一个好的库可以从 PDF 中提取文本 如果需要的话我愿意付出代价 与 C 或经典 ASP VBScript 一起使用的东西将是理想的 我还需要
  • 如何使用 3d 数组和 2d 数组 numpy 进行掩码

    如何使用 1d 数组从 3d 数组中选择一组元素 These are my 3 data types A numpy ndarray numpy ndarray float B1 numpy ndarray numpy ndarray nu