gpt4 book ai didi

python - 在 for 循环中追加数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:44 24 4
gpt4 key购买 nike

我有一个包含 1000 行和 1000 列的数据框。我正在尝试使用 for 循环从该数据帧生成一个 numpy 数组,我使用 for 循环在每个周期随机选择 5 列。我需要附加或连接每个周期生成的每个数组(1000 行和 5 列)。但是,如果不首先指定维度,就不可能创建 numpy 数组。

我试过下面的代码:

import numpy as np
import pandas as pd


df = pd.DataFrame(np.random.choice([0.0, 0.05], size=(1000,1000)))

l = np.array([])

for i in range(0,100):
rand_cols = np.random.permutation(df.columns)[0:5]
df2 = df[rand_cols].copy()
l = np.append(l, df2, axis=0)

但是,我收到以下错误:

ValueError: all the input arrays must have same number of 
dimensions

这段代码总结了我正在做的事情,但是,根据这个例子,我需要的结果是一个 1000 行和 500 列的数组,它是通过每个 for 循环生成的每个数组的串联生成的循环。

最佳答案

List append 总是优于 np.append。它更快,更容易正确使用。

但让我们更详细地查看您的代码:

In [128]: df = pd.DataFrame(np.random.choice([0.0, 0.05], size=(1000,1000)))    
In [129]: l = np.array([])
In [130]: rand_cols = np.random.permutation(df.columns)[0:5]
In [131]: rand_cols
Out[131]: array([190, 106, 618, 557, 514])
In [132]: df2 = df[rand_cols].copy()
In [133]: df2.shape
Out[133]: (1000, 5)
In [134]: l1 = np.append(l, df2, axis=0)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-134-64d82acc3963> in <module>
----> 1 l1 = np.append(l, df2, axis=0)

/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py in append(arr, values, axis)
4692 values = ravel(values)
4693 axis = arr.ndim-1
-> 4694 return concatenate((arr, values), axis=axis)
4695
4696

ValueError: all the input arrays must have same number of dimensions

由于您指定了轴,所有 np.append 正在做的是:

np.concatenate([l, df2], axis=0)

l 是 (0,) 形状,df2 是 (1000,5)。 1d 和 2d,因此有关尺寸的投诉。

从二维 l 数组开始:

In [144]: l = np.zeros((0,5))                                                   
In [145]: np.concatenate([l, df2], axis=0).shape
Out[145]: (1000, 5)
In [146]: np.concatenate([df2, df2], axis=0).shape
Out[146]: (2000, 5)

我认为 np.append 应该被弃用。我们看到太多 SO 错误。正如您的案例所示,很难创建正确的初始数组。 np.array([]) 仅在构建一维数组时有效。再加上重复连接很慢,每次都会创建一个全新的数组。

关于python - 在 for 循环中追加数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55561608/

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