gpt4 book ai didi

python - 如何从结构化 numpy 数组中删除列?

转载 作者:太空狗 更新时间:2023-10-29 17:41:32 26 4
gpt4 key购买 nike

假设您有一个结构化的 numpy 数组,它是从 csv 生成的,第一行是字段名称。该数组具有以下形式:

dtype([('A', '<f8'), ('B', '<f8'), ('C', '<f8'), ..., ('n','<f8'])

现在,假设您要从此数组中删除“第 ith”列。有什么方便的方法吗?

我希望它像删除一样工作:

new_array = np.delete(old_array, 'i')

有什么想法吗?

最佳答案

这不是一个单一的函数调用,但下面显示了一种删除第 i 个字段的方法:

In [67]: a
Out[67]:
array([(1.0, 2.0, 3.0), (4.0, 5.0, 6.0)],
dtype=[('A', '<f8'), ('B', '<f8'), ('C', '<f8')])

In [68]: i = 1 # Drop the 'B' field

In [69]: names = list(a.dtype.names)

In [70]: names
Out[70]: ['A', 'B', 'C']

In [71]: new_names = names[:i] + names[i+1:]

In [72]: new_names
Out[72]: ['A', 'C']

In [73]: b = a[new_names]

In [74]: b
Out[74]:
array([(1.0, 3.0), (4.0, 6.0)],
dtype=[('A', '<f8'), ('C', '<f8')])

包装成一个函数:

def remove_field_num(a, i):
names = list(a.dtype.names)
new_names = names[:i] + names[i+1:]
b = a[new_names]
return b

删除给定字段名称可能更自然:

def remove_field_name(a, name):
names = list(a.dtype.names)
if name in names:
names.remove(name)
b = a[names]
return b

另外,查看 drop_rec_fields function那是 mlab module 的一部分matplotlib 的。


更新:在 How to remove a column from a structured numpy array *without copying it*? 查看我的回答用于创建结构化数组字段的子集 View 而不创建数组副本的方法。

关于python - 如何从结构化 numpy 数组中删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com