将一个值添加到一组配对值的列表中。

3

我有一个数组,里面包含一些数对,表示模型领域中的行列值。我想要添加层的值,以获得一个层、行、列的列表。

我有一个名为rowcol的数组:

array([(25, 65), (25, 66), (25, 67), (25, 68), (26, 65), (26, 66),
       (26, 67), (26, 68), (26, 69), (27, 66), (27, 67), (27, 68),
       (27, 69), (28, 67), (28, 68)], dtype=object)

我想要在每一对数字后面添加一个8,使其看起来像这样

array([(8, 25, 65), (8, 25, 66), (8, 25, 67), (8, 25, 68), (8, 26, 65), (8, 26, 66),
       (8, 26, 67), (8, 26, 68), (8. 26, 69), (8, 27, 66), (8, 27, 67), (8, 27, 68),
       (8, 27, 69), (8, 28, 67), (8, 28, 68)], dtype=object)

我创建了一个与rowcol长度相同的新数组(layer),并将其与2合并: layrowcol = list(zip(layer,rowcol))
最终得到:
[(8, (25, 65)), (8, (25, 66)), (8, (25, 67)), (8, (25, 68)), (8, (26, 65)), (8, (26, 66)), (8, (26, 67)), (8, (26, 68)), (8, (26, 69)), (8, (27, 66)), (8, (27, 67)), (8, (27, 68)), (8, (27, 69)), (8, (28, 67)), (8, (28, 68))]

它有点起作用,但又不完全。是否有一种方法可以将它们组合起来并省略不需要的括号,或者有更好的方法在不使用zip()的情况下为每个对添加层值。任何帮助都将不胜感激。


2
对象数组效率低下(无法向量化),并且不是使用Numpy的常见方式。如果可能,请避免使用它们。或者,如果您不能使用它们,则最好使用列表。大小相同的元组数组通常作为2D数组更好。在Numpy数组上添加新列非常简单快捷。使用元组进行此操作需要缓慢的列表推导+转换回Numpy数组。 - Jérôme Richard
2个回答

1
你可以试试这个。
元组前面的*运算符将其解包为其组成部分。 我正在使用列表推导式遍历输入数组的每个元素,并创建一个以8开头的新元组。
arr = np.array([(25, 65), (25, 66), (25, 67), (25, 68), (26, 65), (26, 66),
       (26, 67), (26, 68), (26, 69), (27, 66), (27, 67), (27, 68),
       (27, 69), (28, 67), (28, 68)], dtype=object)
out = np.array([(8,*x) for x in arr])
out = list(map(tuple,out))

输出:

[(8, 25, 65), (8, 25, 66), (8, 25, 67), (8, 25, 68), (8, 26, 65), (8, 26, 66),
       (8, 26, 67), (8, 26, 68), (8. 26, 69), (8, 27, 66), (8, 27, 67), (8, 27, 68),
       (8, 27, 69), (8, 28, 67), (8, 28, 68)]

我改正了。 - MSS

1
您可以使用numpy.insert函数。
>>> import numpy as np
>>> a = np.array([(25, 65), (25, 66), (25, 67), (25, 68), (26, 65), (26, 66),(26, 67), (26, 68), (26, 69), (27, 66), (27, 67), (27, 68),(27, 69), (28, 67), (28, 68)], dtype=object)
>>> b = np.insert(a, 0, 8, axis=1)

输出:

array([[8, 25, 65],
       [8, 25, 66],
       [8, 25, 67],
       [8, 25, 68],
       [8, 26, 65],
       [8, 26, 66],
       [8, 26, 67],
       [8, 26, 68],
       [8, 26, 69],
       [8, 27, 66],
       [8, 27, 67],
       [8, 27, 68],
       [8, 27, 69],
       [8, 28, 67],
       [8, 28, 68]], dtype=object)

如果你想回到元组列表 tuplelist
>>> list(map(tuple, b))
[(8, 25, 65),
 (8, 25, 66),
 (8, 25, 67),
 (8, 25, 68),
 (8, 26, 65),
 (8, 26, 66),
 (8, 26, 67),
 (8, 26, 68),
 (8, 26, 69),
 (8, 27, 66),
 (8, 27, 67),
 (8, 27, 68),
 (8, 27, 69),
 (8, 28, 67),
 (8, 28, 68)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接