我有一本字典,可以更改对象数。每个对象的类型将始终为3元素的ND数组。例如:
exampleDict = {u'A': array([ 1, 2, 3]), u'B': array([ 2, 3, 4]), u'C': array([ 3, 4, 5]), u'D': array([ 4, 5, 6])}
使用for循环,我希望能够创建一个如下所示的矩阵:
exampleMatrix = array([[ 1, 2, 3], [ 2, 3, 4], [ 3, 4, 5], [ 4, 5, 6]])
我能够使用以下方法创建尺寸正确的0矩阵:
exampleMatrix = np.zeros((len(exampleDict), 3))
但是,我不知道如何适当地填充该矩阵。我正在尝试使用for循环。我愿意接受其他建议。谢谢!
答案 0 :(得分:2)
这里最棘手的部分是,不能保证在某些版本的Python中无法对字典进行排序(如果您使用的是Python 2.7,则肯定不会对字典进行排序),因此必须有一种方法来确定其值的顺序最终的数组。
由于您似乎想按字母的字母顺序创建数组,因此可以使用列表推导和sorted
:
np.array([v for _, v in sorted(exampleDict.items())])
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
答案 1 :(得分:0)
如果您想保留键以供将来参考(与其他变量相比),并且仍将其视为numpy数组,则可以使用Pandas的数据框:
CREATE OR REPLACE PROCEDURE display_users (
pi_date1 IN DATE,
pi_date2 IN DATE,
po_userdisp_cur OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN po_userdisp_cur FOR SELECT u.enrollno,
u.error_code,
u.enroll_date
FROM user_table u
WHERE u.enroll_date BETWEEN pi_date1 AND pi_date2;
END;
然后,您可以对其执行numpy操作,有时您可能必须使用my_array=pandas.DataFrame(exampleDict)
。
由于您具有密钥,因此熊猫在其余的代码中可能会做很多工作,从而省去了一些麻烦。我建议去看看。
如果您想保持简单,则除了列表理解其他答案外,还有一种更简单的方法。尽管我不确定您是否会面对大型阵列产生任何影响,但是使用解决方案进行速度测试的方法是:
my_array.values
:3.63u
np.array([v for _, v in (exampleDict.items())])
:3.53u
np.array([v for v in exampleDict.values()])
:3.40u
不用说,熊猫解决方案将比其他方法花费更多的时间,它仅保留更多信息,并且“也许”将速度提高到其他地方。