numpy 将值添加到成对值列表中

b5buobof  于 2022-12-29  发布在  其他
关注(0)|答案(2)|浏览(148)

我有一个数组,其中有一对数字代表模型域中的行、列值。我试图添加层值,以获得一个层、行、列的列表。
我有一个数组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长度相同的新数组(层),并将2压缩为:
layrowcol =列表(压缩(层,行列))
结果是:

[(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()的情况下将层值添加到每个对中。任何帮助都是值得感谢的。

xdyibdwo

xdyibdwo1#

您可以使用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)

如果你想回到tuple s的list

>>> 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)]
col17t5w

col17t5w2#

你可以试试这个。
元组前面的*操作符将元组解包成它的组成部分。我使用列表解析来迭代输入数组的每个元素,并从它创建一个新的元组,以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)]

相关问题