【问题标题】:how to merge a list of strings with numpy arrays stored in a list如何将字符串列表与存储在列表中的numpy数组合并
【发布时间】:2021-09-05 01:52:05
【问题描述】:

我有一个 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 中将这些字符串与数组连接起来,提前感谢任何帮助。

【问题讨论】:

  • 我确信这确实是您想要做的。一旦你的 numpy 数组混合了 dtype,使用它们就不太容易了。
  • 亲爱的@erip,感谢您的提示。那么,是否可以例如首先连接所有数组,然后将每个字符串添加两次(len of concatenated array / len (names))?
  • 是的,有可能。同样,在 np 数组中混合 dtype 并没有任何好处。看来您可能想要一个数据框或类似的东西。
  • 您可以使用recarray 左右,但同样,您似乎从根本上遇到了XY 问题,并且可能使用了错误的工具来完成这项工作。

标签: python arrays numpy merge concatenation


【解决方案1】:

我们先从列表开始,然后再将每个子列表转换为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

【讨论】:

    猜你喜欢
    • 2020-03-29
    • 2021-09-24
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2017-08-29
    • 2015-04-17
    • 1970-01-01
    相关资源
    最近更新 更多