【发布时间】:2015-04-04 13:46:07
【问题描述】:
我有一个列表 A 的形式:
A = ['P', 'Q', 'R', 'S', 'T', 'U']
和一个数组 B 的形式:
B = [[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]
[13 14 15 16 17 18]
[19 20 21 22 23 24]]
现在我想创建一个结构化数组 C 的形式:
C = [[ P Q R S T U]
[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]
[13 14 15 16 17 18]
[19 20 21 22 23 24]]
这样我就可以提取列名为 P、Q、R 等的列。我尝试了以下代码,但它没有创建结构化数组并给出以下错误。
代码
import numpy as np
A = (['P', 'Q', 'R', 'S', 'T', 'U'])
B = np.array([[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24]])
C = np.vstack((A, B))
print (C)
D = C['P']
错误
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
在这种情况下如何在 Python 中创建结构化数组?
更新
两者都是变量,它们的形状在运行时会发生变化,但列表和数组的列数相同。
【问题讨论】:
-
B中是否缺少某些列? -
我已经更新了数组 B。
-
你所说的改变是什么意思?增加减少?至少
numpy'prefers' 有一个固定的形状,这就是为什么你应该首先获取所有数据然后启动 numpy 机器 -
我的意思是列数可能会根据数据集增加或减少。
-
您的
C看起来不像结构化数组(由genfromtxt生成)。充其量它是一个包含字符串和数字的 dtype 对象数组,或者是一个字符串数组,引号被删除。