gpt4 book ai didi

python - 将单独的 1D np.arrays 转换为 2D np.arrays 列表

转载 作者:行者123 更新时间:2023-11-30 23:04:09 24 4
gpt4 key购买 nike

我正在尝试将三个一维数组转换为二维数组列表。我已经通过创建一个空的 ndarray 并逐行填充它来设法做到这一点。有人可以告诉我一种更优雅的方法吗?

import numpy as np
import pandas as pd
one=np.arange(1,4,1)
two=np.arange(10,40,10)
three=np.arange(100,400,100)
df=pd.DataFrame({'col1':one,'col2':two,'col3':three})

desired_output=[np.array([[1.,10.],[1.,100.]]),np.array([[2.,20.],[2.,200.]]),np.array([[3.,30.],[3.,300.]])]

当前有效的、不优雅的方法:

output=[]
for i in range(len(df)):
temp=np.zeros(shape=(2,2))
temp[0][0]=df.iloc[i,0]
temp[0][1]=df.iloc[i,1]
temp[1][0]=df.iloc[i,0]
temp[1][1]=df.iloc[i,2]
output.append(temp)

最佳答案

所以首先,您可以通过简单地执行以下操作从 df 值获取数组

In [61]:
arr = df.values
arr
Out[61]:
array([[ 1, 10, 100],
[ 2, 20, 200],
[ 3, 30, 300]])

然后再次添加数组中的第一列

In [73]:
arr_mod = np.hstack((arr , arr[: , 0][:, np.newaxis]))
arr_mod
Out[73]:
array([[ 1, 10, 100, 1],
[ 2, 20, 200, 2],
[ 3, 30, 300, 3]])

将刚刚添加的列与数组中的最后一列交换

In [74]:
arr_mod[: , [2 , 3]] = arr_mod [: , [3 , 2]]
arr_mod
Out[74]:
array([[ 1, 10, 1, 100],
[ 2, 20, 2, 200],
[ 3, 30, 3, 300]])

然后将此 2d array 转换为 3d array 并将其转换为列表

In [78]:
list(arr_mod.reshape( -1, 2 , 2))
Out[78]:
[array([[ 1, 10],
[ 1, 100]]), array([[ 2, 20],
[ 2, 200]]), array([[ 3, 30],
[ 3, 300]])]

关于python - 将单独的 1D np.arrays 转换为 2D np.arrays 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33854771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com