微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从这两个数组构造一个 NumPy 数组列表?

如何解决如何从这两个数组构造一个 NumPy 数组列表?

我有两个数组,它们是 PDF 坐标空间中的列和行值:

x = array([111,303,405,513]
y = array([523,546,569,603 ])

这是一个视觉效果

enter image description here

我需要将其转换为一个 numpy 数组列表,其中每个数组是边界坐标(定义框的四个点)。例如,左下角和右上角框的列表将是

all_Boxes =
    [array([[111,523],[303,546],[111,546]],dtype=int64),array([[405,569],[513,603],[405,603]],dtype=int64)]

以此类推九个盒子。我怎样才能做到这一点?我猜想是某种 NumPy 乘法,但我看不到它。谢谢。

解决方法

简短:

import numpy as np
x = np.array([111,303,405,513])
y = np.array([523,546,569,603 ])

def coupler(lst): return [[c1,c2] for c1,c2 in zip(lst,lst[1:])]

x_couples,y_couples=coupler(x),coupler(y)

boxes=[]
for x1,x2 in x_couples:
    for y1,y2 in y_couples:
        boxes.append(np.array([[x1,y1],[x2,y2],[x1,y2]]))

输出:

[array([[111,523],[303,546],[111,546]]),array([[111,569],569]]),...]
,

首先,尝试为每个框生成 x 和 y 坐标。您将分别拥有 x 和 y 的 3 个坐标集。然后,计算上述 x 和 y 坐标集的笛卡尔积。

import numpy as np

x = array([111,513]
y = array([523,603 ])

# generate grid points
xs = np.repeat(x,4)[2:-2].reshape(-1,4)
xs = np.roll(xs,-1,axis=1)
ys = np.repeat(y,4)

# cartesian product
xx = np.tile(xs,ys.shape[0]).reshape(-1,4)
yy = np.tile(ys.reshape(1,-1),xs.shape[0]).reshape(-1,4)
boxes = np.hstack((xx,yy)).reshape(-1,2,4)

关于笛卡尔积的更多信息:

Cartesian product of sets

How to implement the cartesian product in numpy efficiently

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?