python - reshape 和堆叠 2D 阵列以形成 3D 阵列

标签 python arrays numpy reshape

我有一个数据框如下

df = pd.DataFrame({'a':[1,1,1,2,2,2], 
                   'b': [10, 20, 30, 20, 40, 60],
                  'c': [80, 80, 80, 120, 120, 120]})

我想获取3D数组

array([[[  1,  10,  80],
       [  2,  20, 120] ],

       [[  1,  20,  80] ,
       [  2,  40, 120] ],

       [[  1,  30,  80],
        [  2,  60, 120]]], dtype=int64)

我喜欢这个

values = df.values
values.reshape(3, 2, 3)

并得到一个不正确的数组。如何得到预期的数组?

最佳答案

获取数组数据,然后将第一个轴拆分为两个,其中第一个轴的长度为 2,从而为我们提供一个 3D 数组,然后交换这两个轴-

df.values.reshape(2,-1,df.shape[1]).swapaxes(0,1)

sample 运行-

In [711]: df
Out[711]: 
   a   b    c
0  1  10   80
1  1  20   80
2  1  30   80
3  2  20  120
4  2  40  120
5  2  60  120

In [713]: df.values.reshape(2,-1,df.shape[1]).swapaxes(0,1)
Out[713]: 
array([[[  1,  10,  80],
        [  2,  20, 120]],

       [[  1,  20,  80],
        [  2,  40, 120]],

       [[  1,  30,  80],
        [  2,  60, 120]]])

这使我们无需复制即可查看原始数据,因此具有最短的常数时间。

运行时测试

案例#1:

In [730]: df = pd.DataFrame(np.random.randint(0,9,(2000,100)))

# @cᴏʟᴅsᴘᴇᴇᴅ's soln
In [731]: %timeit np.stack(np.split(df.values, 2), axis=1)
10000 loops, best of 3: 109 µs per loop

In [732]: %timeit df.values.reshape(2,-1,df.shape[1]).swapaxes(0,1)
100000 loops, best of 3: 8.55 µs per loop

案例#2:

In [733]: df = pd.DataFrame(np.random.randint(0,9,(2000,2000)))

# @cᴏʟᴅsᴘᴇᴇᴅ's soln
In [734]: %timeit np.stack(np.split(df.values, 2), axis=1)
100 loops, best of 3: 4.3 ms per loop

In [735]: %timeit df.values.reshape(2,-1,df.shape[1]).swapaxes(0,1)
100000 loops, best of 3: 8.37 µs per loop

关于python - reshape 和堆叠 2D 阵列以形成 3D 阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46512892/

相关文章:

Python,使用 ctypes 创建 C++ 类包装器

python - VCF 解析和插入数据库速度慢

java - TextView 数组不显示数据

python - 使用 numpy.genfromtxt 读取包含逗号的字符串的 csv 文件

python - 遍历值或注册表项.. _winreg Python

Javascript - 创建一个带有两个参数的函数并返回二维数组

c# - 是让一个 "for loop"循环遍历 9 个数组还是让 9 个 "for loops"每个循环遍历一个数组更好

python - 来自因子载荷和因子协方差的协方差矩阵?

python - 如何在 NumPy 一维数组上应用具有不同参数的函数来制作二维数组

python - Pandas python中的并行处理