如何将字符串列表与存储在列表中的 numpy 数组合并

how to merge a list of strings with numpy arrays stored in a list

我有一个 numpy 数组列表和一个字符串列表。我想将字符串与数组合并。这些是我的数组和字符串:

arrs=[np.array([[1.,0.,0.], [1.,1.,1.]]), np.array([[4.,4.,4.], [2.,4.,0.]]),\
       np.array([[9.,0.,9.], [9.,7.,5.]])]
names=['group_A', 'group_B', 'group_H']

names 中的第一个字符串应添加为 arrs 中第一个数组的最后一列。第二个也与第二个数组合并,依此类推。最后,我想合并所有数组并将其获取为:

merged_arrs=[np.array([[1.,0.,0., 'group_A'], [1.,1.,1., 'group_A'],\
                       [4.,4.,4., 'group_B'], [2.,4.,0., 'group_B'],\
                       [9.,0.,9., 'group_H'], [9.,7.,5., 'group_H']])]

我不知道如何将这些字符串与 python 中的数组连接起来,非常感谢提前提供的任何帮助。

我们先从列表开始,然后再将每个子列表转换为 np.array 怎么样?我不知道为什么你需要 np.array 而不是使用内置列表,但是在 np.array 中设置 dtype='object' 可以让你存储不同类型的项目。

示例代码

import numpy as np

arrs = [np.array([[1., 0., 0.], [1., 1., 1.]]),
        np.array([[4., 4., 4.], [2., 4., 0.]]),
        np.array([[9., 0., 9.], [9., 7., 5.]])]

# Convert each sub array into list
arrs = [A.tolist() for A in arrs]

names = ['group_A', 'group_B', 'group_H']

for A, name in zip(arrs, names):
    for A_sub in A:
        A_sub.append(name)

# Convert each sub array into numpy array
merged_arrs = [np.array(A, dtype='object') for A in arrs]

print(merged_arrs)

# Outputs:
# [array([[1.0, 0.0, 0.0, 'group_A'], [1.0, 1.0, 1.0, 'group_A']], dtype=object), 
#  array([[4.0, 4.0, 4.0, 'group_B'], [2.0, 4.0, 0.0, 'group_B']], dtype=object), 
#  array([[9.0, 0.0, 9.0, 'group_H'], [9.0, 7.0, 5.0, 'group_H']], dtype=object)]

参考

https://numpy.org/doc/stable/reference/arrays.dtypes.html#specifying-and-constructing-data-types