背景:我正在尝试建立亲和力矩阵以进入sklearn谱聚类。
在这个问题中,我遇到了numpy数组索引是基于0的整数的问题,对于我的应用程序我使用某种特定于应用程序的ID(基于字符串,随机示例" abc123& #34)。我想创建一个由我拥有的所有数据点索引的2d numpy数组。例如,给定两个点points = ["abc123", "xyz456"]
,我将有2d numpy数组,其行索引和列索引为points
。这样我就可以通过类似于arr["abc123"]["xyz456"] = dist
我怎么能实现这一目标?谢谢。
答案 0 :(得分:3)
Pandas可以做到这一点,还有更多......
In [41]: import pandas as pd
In [122]: a = np.random.randint(100, size=(5, 3))
In [123]: a
Out[123]:
array([[53, 7, 34],
[54, 56, 85],
[ 0, 11, 83],
[63, 28, 88],
[65, 19, 44]])
In [124]: df = pd.DataFrame(a, index=list('abcde'), columns=list('xyz'))
In [125]: df
Out[125]:
x y z
a 53 7 34
b 54 56 85
c 0 11 83
d 63 28 88
e 65 19 44
In [126]: df.loc[['a','d'], ['x','y']]
Out[126]:
x y
a 53 7
d 63 28
我们总是可以使用.values
访问者从DataFrame中获取Numpy数组:
In [127]: df.values
Out[127]:
array([[53, 7, 34],
[54, 56, 85],
[ 0, 11, 83],
[63, 28, 88],
[65, 19, 44]])
In [128]: df.loc[['a','d'], ['x','y']].values
Out[128]:
array([[53, 7],
[63, 28]])
答案 1 :(得分:1)
您可以使用带键的字典,但如果仍需要numpy数组,则可以使用dtype
。来自doc:
>>> dt = np.dtype([('name', np.unicode_, 16), ('grades', np.float64, (2,))])
>>> x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)
>>> x[1]
('John', [6.0, 7.0])
>>> x[1]['grades']
array([ 6., 7.])