gpt4 book ai didi

python - 如何向 numpy 数组添加名称而不更改其维度?

转载 作者:行者123 更新时间:2023-12-02 04:10:48 25 4
gpt4 key购买 nike

我有一个现有的两列 numpy 数组,我需要向其中添加列名称。在下面的 block 1 所示的玩具示例中,通过 dtype 传递这些内容是可行的。然而,对于我的实际数组,如 block 2 所示,相同的方法会产生更改数组维度的意外(对我而言!)副作用。

如何将我的实际数组(下面第二个 block 中名为 Y 的数组)转换为具有命名列的数组,就像我在第一个 block ?

block 1:(A 的列在未 reshape 维度的情况下命名)

import numpy as np
A = np.array(((1,2),(3,4),(50,100)))
A
# array([[ 1, 2],
# [ 3, 4],
# [ 50, 100]])
dt = {'names':['ID', 'Ring'], 'formats':[np.int32, np.int32]}
A.dtype=dt
A
# array([[(1, 2)],
# [(3, 4)],
# [(50, 100)]],
# dtype=[('ID', '<i4'), ('Ring', '<i4')])

block 2:(命名实际数组的列 Y, reshape 其维度)

import numpy as np
## Code to reproduce Y, the array I'm actually dealing with
RING = [1,2,2,3,3,3]
ID = [1,2,3,4,5,6]
X = np.array([ID, RING])
Y = X.T
Y
# array([[1, 3],
# [2, 2],
# [3, 2],
# [4, 1],
# [5, 1],
# [6, 1]])

## My unsuccessful attempt to add names to the array's columns
dt = {'names':['ID', 'Ring'], 'formats':[np.int32, np.int32]}
Y.dtype=dt
Y
# array([[(1, 2), (3, 2)],
# [(3, 4), (2, 1)],
# [(5, 6), (1, 1)]],
# dtype=[('ID', '<i4'), ('Ring', '<i4')])

## What I'd like instead of the results shown just above
# array([[(1, 3)],
# [(2, 2)],
# [(3, 2)],
# [(4, 1)],
# [(5, 1)],
# [(6, 1)]],
# dtype=[('ID', '<i4'), ('Ring', '<i4')])

最佳答案

首先,因为您的问题询问有关为数组命名的问题,所以我觉得有义务指出,使用“结构化数组”来命名可能不是最好的方法。当我们使用表时,我们经常喜欢给行/列命名,如果是这种情况,我建议你尝试类似 pandas 的东西。这太棒了。如果您只是想在代码中组织一些数据,数组字典通常比结构化数组要好得多,例如您可以这样做:

Y = {'ID':X[0], 'Ring':X[1]}

既然如此,如果您想使用结构化数组,我认为这是最清晰的方法:

import numpy as np

RING = [1,2,2,3,3,3]
ID = [1,2,3,4,5,6]
X = np.array([ID, RING])

dt = {'names':['ID', 'Ring'], 'formats':[int, int]}
Y = np.zeros(len(RING), dtype=dt)
Y['ID'] = X[0]
Y['Ring'] = X[1]

关于python - 如何向 numpy 数组添加名称而不更改其维度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24168569/

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