gpt4 book ai didi

python - 将不同列表的特定元素合并到新列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:25:15 25 4
gpt4 key购买 nike

我写了如下代码。我首先生成了大小为 3,5 的统一随机变量。然后我使用这个二维数组中的每个元素作为平均值并生成新列表。我想要做的是创建 10 个新的二维数组,同时使用相同形状 3,5 上列表中的每个元素。例如

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

mean_route1 = pd.DataFrame(np.random.uniform(0, 10, size=(3,5)))
print(mean_route1)
N=10

for m in np.nditer(mean_route1):
m3 = np.random.poisson(lam = m, size=N)
print(m3)

输出是这样的:

          0         1         2         3         4
0 7.740569 5.435856 6.682996 5.213202 2.100649
1 6.174332 0.059057 2.951913 1.341994 2.734486
2 7.780503 7.277458 7.406986 8.498494 0.070157
[ 5 5 7 7 9 5 9 12 7 5]
[ 4 4 3 4 12 3 9 6 6 1]
[8 8 1 9 3 5 8 7 4 6]
[5 6 9 6 4 4 9 7 4 5]
[2 3 3 3 0 2 4 1 4 1]
[4 6 9 3 8 4 3 7 8 5]
[0 0 0 0 0 0 0 0 0 0]
[2 1 3 4 2 2 0 1 3 3]
[2 1 2 2 1 0 1 0 1 1]
[2 1 3 5 5 3 5 4 1 3]
[ 5 5 7 6 6 6 10 10 5 7]
[ 7 6 7 9 4 14 6 7 8 9]
[ 8 10 1 9 10 7 9 9 9 13]
[14 4 8 10 6 3 10 7 12 4]
[0 0 0 0 1 0 0 0 0 0]

例如:我接下来要做的是像这样的 10 个数组:( (:, 0) 列在新的第一个数组上。

          0         1         2         3         4
0 5 4 8 5 2
1 4 0 2 2 2
2 5 7 8 14 0

(:, 1) 在新的第二个数组上,... , (:, 10) 在新的第 10 个数组上。

我该怎么做?我是 Python 和 stackoverflow 的新手,所以如果我有任何错误,我深表歉意。

最佳答案

忘记(暂时)数据帧,使用 numpy 我们可以做到:

In [87]: mean_route1 = np.random.uniform(0,10,size=15)                                 
In [88]: alist = []
In [89]: for m in mean_route1:
...: alist.append(np.random.poisson(lam=m, size=10))
...:
In [90]: arr = np.array(alist)
In [91]: arr
Out[91]:
array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 4, 2, 3, 2, 6, 7, 3, 7, 7, 5],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 7, 9, 8, 1, 6, 5, 6, 11, 6, 1],
[16, 7, 9, 6, 6, 11, 11, 16, 9, 12],
[ 3, 5, 2, 0, 2, 6, 4, 5, 3, 3],
[ 5, 5, 8, 7, 9, 10, 5, 10, 7, 8],
[ 5, 5, 4, 4, 2, 5, 1, 2, 1, 2],
[ 4, 2, 6, 7, 2, 6, 5, 0, 1, 4],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 5, 5, 5, 4, 3, 2, 5, 7, 4, 5],
[ 1, 1, 1, 1, 2, 0, 2, 0, 1, 3],
[ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[ 0, 0, 6, 1, 3, 2, 0, 1, 1, 2],
[ 9, 10, 10, 8, 9, 9, 9, 6, 12, 9]])

这是一个 (15,10) 形状数组,15 个 lam 值各有 10 个样本。如果您愿意,我们可以将其 reshape 为 (3,5,10),但这不会改变值。

In [92]: arr.reshape(3,5,10)                                                           
Out[92]:
array([[[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 4, 2, 3, 2, 6, 7, 3, 7, 7, 5],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 7, 9, 8, 1, 6, 5, 6, 11, 6, 1],
[16, 7, 9, 6, 6, 11, 11, 16, 9, 12]],

[[ 3, 5, 2, 0, 2, 6, 4, 5, 3, 3],
[ 5, 5, 8, 7, 9, 10, 5, 10, 7, 8],
[ 5, 5, 4, 4, 2, 5, 1, 2, 1, 2],
[ 4, 2, 6, 7, 2, 6, 5, 0, 1, 4],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],

[[ 5, 5, 5, 4, 3, 2, 5, 7, 4, 5],
[ 1, 1, 1, 1, 2, 0, 2, 0, 1, 3],
[ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[ 0, 0, 6, 1, 3, 2, 0, 1, 1, 2],
[ 9, 10, 10, 8, 9, 9, 9, 6, 12, 9]]])

通过从 (15,) 而不是 (3,5) 开始,我可以进行简单的迭代,而无需 nditer 的复杂性。 (我不鼓励使用 nditer,除非你真的需要一些特殊的功能。它并不更快。)

我可以从那个 (3,5,10) 数组构造 10 个数据帧,循环如下:

In [94]: import pandas as pd                                                           
In [95]: for i in range(3):
...: print(pd.DataFrame(_92[:,:,i])) # Out[92] array
...:
0 1 2 3 4 # 1st column
0 0 4 0 7 16
1 3 5 5 4 0
2 5 1 0 0 9

0 1 2 3 4 # 2nd column
0 0 2 0 9 7
1 5 5 5 2 0
2 5 1 0 0 10

0 1 2 3 4
0 0 3 0 8 9
1 2 8 4 6 0
2 5 1 0 6 10

我可以一次用所有 mean_route1 值调用 poisson:

In [97]: np.random.poisson(lam=mean_route1, size=(10,15))                              
Out[97]:
array([[ 0, 2, 0, 4, 11, 5, 9, 2, 8, 0, 10, 0, 0, 1, 5],
[ 0, 4, 0, 3, 9, 3, 11, 3, 4, 0, 4, 0, 2, 0, 7],
[ 0, 4, 0, 4, 6, 1, 7, 4, 2, 0, 5, 1, 0, 0, 5],
...
[ 0, 9, 0, 6, 12, 3, 3, 5, 3, 0, 6, 1, 1, 1, 6]])

或转置到我在 Out[91] 中得到的 (15,10):

In [98]: np.random.poisson(lam=mean_route1, size=(10,15)).T                            
Out[98]:
array([[ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
[ 1, 4, 5, 6, 7, 1, 6, 2, 0, 2],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 4, 5, 4, 6, 3, 9, 1, 10, 3, 4],
....
[10, 8, 5, 13, 7, 10, 5, 10, 7, 9]])

或者使用 lam 的 (3,5) 数组:

In [100]: np.random.poisson(lam=mean_route1.reshape(3,5), size=(10,3,5))               
Out[100]:
array([[[ 0, 1, 0, 2, 9],
[ 1, 7, 2, 6, 0],
[ 3, 0, 0, 1, 10]],

[[ 0, 5, 0, 7, 8],
[ 2, 6, 2, 8, 0],
[ 5, 2, 0, 1, 11]],

[[ 0, 7, 0, 7, 11],
[ 2, 7, 2, 4, 0],
[ 7, 1, 1, 1, 10]],
....
[ 7, 1, 1, 3, 12]]])

再次制作数据框,这次在第一个维度上迭代:

In [101]: for i in range(3): 
...: print(pd.DataFrame(_100[i,:,:]))
...:
0 1 2 3 4
0 0 1 0 2 9
1 1 7 2 6 0
2 3 0 0 1 10

0 1 2 3 4
0 0 5 0 7 8
1 2 6 2 8 0
2 5 2 0 1 11

0 1 2 3 4
0 0 7 0 7 11
1 2 7 2 4 0
2 7 1 1 1 10

关于python - 将不同列表的特定元素合并到新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57981782/

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