Arrays 如何逐行组合两个数组

Arrays 如何逐行组合两个数组,arrays,python-3.x,numpy,dxf,Arrays,Python 3.x,Numpy,Dxf,我对用python编程很陌生。对于编程机器的使用,我需要使用g代码。因此,我使用Python程序从数据中读取gcode。现在,我必须组合如下代码: def merge(*iterables): """Print merged iterables.""" for i in zip(*iterables): result = tuple(it.chain.from_iterable(i)) result = np.array(result)

我对用python编程很陌生。对于编程机器的使用,我需要使用g代码。因此,我使用Python程序从数据中读取gcode。现在,我必须组合如下代码:

def merge(*iterables):
    """Print merged iterables."""
    for i in zip(*iterables):
        result = tuple(it.chain.from_iterable(i))
        result = np.array(result)
        print(result)

merge(left, right)
# ['a' 'b' 'c' 'g' 'h' 'i']
# ['d' 'e' 'f' 'j' 'k' 'l']
代码1:

  • 第1行(a、b、c)
  • 第2行(d、e、f)
代码2:

  • 第1行(g、h、i)
  • 第2行(j、k、l)
结果应该是这样的

  • 第1行(a、b、c、g、h、i)
  • 第2行(d、e、f、j、k、l)
他们的代码我现在基本上只创建了这两个代码。这不会合并它。我知道我必须和“numpy”合作,但我坚持了下来

import dxfgrabber
import numpy as np

left = dxfgrabber.readfile('data1')
right = dxfgrabber.readfile('data2')


def createcode(code):
    for i in code.entities:
        for p in i.points:
            mylist = np.array(p)
            print(mylist)


createcode(left)
createcode(right)
这个怎么样

def createcode(code):
    return [[p for p in i.points] for i in code.entities]
您可以将此功能应用于这两种情况,例如:

a = createdcode(left)
b = createdcode(right)
在本例中,您有两个列表。然后您可以将它们组合起来:

c = [u + j for u, j in zip(a, b)]
然后您可以打印它们:

for i in c:
    print(i)
给定的

import itertools as it

import numpy as np


left = tuple("abc"), tuple("def")
right = tuple("ghi"), tuple("jkl")
代码

合并可以通过简单的链接完成:

[tuple(it.chain.from_iterable(i)) for i in zip(left, right)]
# [('a', 'b', 'c', 'g', 'h', 'i'), ('d', 'e', 'f', 'j', 'k', 'l')]
在这里,项目在列表中压缩在一起并展开

扩展到打印numpy数组(或任何所需输出)的单个函数,您可以尝试以下操作:

def merge(*iterables):
    """Print merged iterables."""
    for i in zip(*iterables):
        result = tuple(it.chain.from_iterable(i))
        result = np.array(result)
        print(result)

merge(left, right)
# ['a' 'b' 'c' 'g' 'h' 'i']
# ['d' 'e' 'f' 'j' 'k' 'l']
在这里,可以将任意数量的iterables压缩在一起

演示

lt = [(10.0, 10.0, 0.0), (90.0, 10.0, 0.0), (90.0, 90.0, 0.0), (10.0, 90.0, 0.0)]
rt = [(20.0, 3.0, 6.0), (16.0, 6.0, 9.0), (5.0, 7.0, 7.0), (9.0, 2.0, 8.0)]

merge("abcd", lt, rt)
# ['a' '10.0' '10.0' '0.0' '20.0' '3.0' '6.0']
# ['b' '90.0' '10.0' '0.0' '16.0' '6.0' '9.0']
# ['c' '90.0' '90.0' '0.0' '5.0' '7.0' '7.0']
# ['d' '10.0' '90.0' '0.0' '9.0' '2.0' '8.0']

你需要用numpy吗?为什么不列出?当然,如果这也是可能的。但我不知道怎么做,因为for循环创建了“列表”,左变量和右变量中的数据类型是什么?基本上我从一个cnc程序中读取了两个.dxf数据。“createcode”类以[2.5,6,8][3,7,9]的格式创建可读数字。在这种情况下,您可以使用经典列表而不是Numpy数组,然后扩展其中一个。检查我的答案。循环创建的输出看起来像:
[10.0,10.0,0.0][90.0,10.0,0.0][90.0,90.0,0.0][10.0,90.0,0.0][10.0,90.0,0.0]
,我需要在每一行末尾输入来自“右”数据的代码。正确的数据格式相同。我会根据您的功能更新答案。您需要在同一个函数中迭代以获得正确的数据吗?如果添加正确的数据,每个列表必须包含6个元素?好的,我想我明白了。等待答案。我试图用另一个答案解释。也许这有助于你理解这个问题。非常感谢它的工作。是否有一种简单的方法可以删除输出中的所有
0.0
?浮点输出来自浮点输入。您可以通过
[tuple(map(int,i))对lt[0]中的i进行整数预处理
合并(“abcd”,lt[0],rt[0])
括号内的数字是什么?如果我有一个超过四行的列表,它似乎不起作用。这些是列表索引。它正在选择列表中的第一项,而对于
lt
,它恰好是另一个列表
merge
适用于一个iterable的iterable,例如
[[1,2,3],“abc”,(1,“b”)]
。如果您的输入更加嵌套,则需要对其进行预处理。注
lt
是一个iterables列表,因此进行了预处理。如果您需要不同的输入,请张贴一个实际数据的示例。
lt
rt
始终由一行中的3个数字作为一列组成。你可以看到它是x,y,z轴。但是行数是可变的!这取决于我们使用
createcode
编译的文件。合并后,我们基本上有
x1、y1、z1、x2、y2、z2
。希望这有帮助。