use*_*012 1 python arrays dictionary numpy
我有一个python字典定义如下,其中最里面的项是双元素数组:
mydict = {1: {1: [1, 2], 2: [3, 4]}, 2: {1: [5, 6], 2: [7, 8]}}
Run Code Online (Sandbox Code Playgroud)
我现在需要的是将所有第0个元素形成为一个新数组,即使用[:,:0]或[...,0]返回[1,3,5,6].但是,[:,:0]或[...,0]在这种情况下不起作用,如下所示.
import numpy as np
import pandas as pd
a = np.array(pd.DataFrame.from_dict(mydict))
print a
Run Code Online (Sandbox Code Playgroud)
它给出了以下输出:
[[[1, 2] [5, 6]]
[[3, 4] [7, 8]]]
Run Code Online (Sandbox Code Playgroud)
看来这是一个2x2x2阵列.使用单独的括号访问相应的元素没有问题,例如,[0] [0] [0]返回1.但是,[0,0,0]会导致错误.
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-150-f68aba7de42a> in <module>()
----> 1 a[0,0,0]
IndexError: too many indices for array
Run Code Online (Sandbox Code Playgroud)
似乎两元素数组被认为是2x2数组中的元素 - 但我需要的是一个2x2x2数组才能实现我的目标.有没有办法将其转换为2x2x2阵列?
您的问题来自于pandas将您的初始条目(列表)视为对象这一事实,因此当您转换为numpy数组时,您最内部的条目是列表对象.例如,
> type(a)
numpy.ndarray
> type(a[0])
numpy.ndarray
> type(a[0,0])
list
Run Code Online (Sandbox Code Playgroud)
如果您知道最终想要的形状(2x2x2),您可以随时执行:
> b = np.array(map(np.array, a.flat)).reshape(2,2,2)
> b.shape
(2, 2, 2)
> b[0,0,0]
1
Run Code Online (Sandbox Code Playgroud)
编辑:甚至更简单:
> b = np.array(a.tolist())
array([[[1, 2],
[5, 6]],
[[3, 4],
[7, 8]]])
Run Code Online (Sandbox Code Playgroud)
如果你想要每个最里面的行的第一项,例如1,3,5,7,你可以做b[...,0]或者b[...,0].flatten()根据你想要的结果形状.
| 归档时间: |
|
| 查看次数: |
3331 次 |
| 最近记录: |