2017-09-26 43 views
1

我是用python进行编程的新手。对于使用机器编程我需要使用g代码。因此我使用Python程序从数据中读出gcode。现在,我必须的代码等以下结合:如何将两个数组逐行组合

代码1:

  • LINE1(A,B,C)
  • LINE2(d,E,F)

代码2:

  • LINE1(G,H,I)
  • LINE2(J,K,L)

的结果应该

  • LINE1(A,B,C,G,H,I)
  • LINE2(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) 
+0

您需要使用numpy的?为什么不列出? – Eduardo

+0

当然,如果这也是可能的。但我不知道如何,因为创建“列表”的for循环 –

+0

什么类型的数据在**左**和**右**变量? – Eduardo

回答

0

这是怎么回事?

def createcode(code): 
    return [[p for p in i.points] for i in code.entities] 

您可以将此funcion这两种情况下,例如:

a = createdcode(left) 
b = createdcode(right) 

在这种情况下你有两个列表。然后你可以将它们组合起来:

c = [u + j for u, j in zip(a, b)] 

然后你可以将它们打印:

for i in c: 
    print(i) 
+0

这是由环产生的输出lookes像: '[10.0,10.0,0.0] [90.0,10.0,0.0] [90.0,90.0,0.0] [10.0,90.0,0.0]' ,我需要在最后的每行中都有来自“正确”数据的代码。正确的数据格式相同。 –

+0

我根据你的功能更新答案。你需要在相同的函数中迭代正确的数据?如果添加_right data_,每个列表必须包含6个元素?好吧,我想我明白了。等待答案。 – Eduardo

+0

我试图解释一个额外的答案。也许这有助于你理解这个问题。 –

1

鉴于

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'] 
+0

非常感谢它的作品。有没有简单的方法来删除输出中的所有“0.0”? –

+0

浮点输出来自浮点输入。您可以通过'[tuple(map(int,i))'为我在lt [0]'''中将输入预处理为整数。 – pylang

+0

'merge(“abcd”,lt [0],rt [0])'括号内的数字是什么?如果我有超过四行的列表,它似乎不起作用。 –