我想给出一个名为columns的现有numpy数组。我试图通过以下方式命名列:
X = np.random.normal(0,1,(3,3))
names = ['a','b','c']
types = ['f4']*len(names)
t = list(zip(names,types))
Y= np.array(X, dtype=t)
但是,当我调用Y['a']
时,我会得到一个3x3数组,而不是X的第一列,即3x1。
如何给出一个名为columns的现有数组?我的例子中的错误是什么?
答案 0 :(得分:2)
您正在寻找.view
,它以新的方式重新解释现有的内存。
names = ['a','b','c']
types = [X.dtype]*len(names)
t = list(zip(names,types))
Y = X.view(t)
为此,您需要匹配X
的dtype - f4
可能不正确。
您的代码相当于X.astype(t)
。转换为struct数组时,会尝试将每个字段设置为相同的值。