【问题标题】:Save random values from multi-dimensional NumPy array从多维 NumPy 数组中保存随机值
【发布时间】:2019-06-20 06:43:10
【问题描述】:

我有一个 149x5 的 NumPy 数组。我需要保存从整个数组中随机选择的一些(30%)值。另外选定的值将从数据中删除。

到目前为止我所拥有的:

# Load dataset
data = pd.read_csv('iris.csv')

# Select randomly 30%(45) of rows from dataset
random_rows = data.sample(45)

# Object for values to be saved
values = []

# Iterate over rows and select a value randomly.
for index, row in data.iterrows():

   # Random between 1 - 5
   rand_selector = randint(0, 4)

   # Somehow save deleted value and its position in data object
   value = ??                                                 <-------

   values.append(value)

   # Delete random value
   del row[rand_selector]

为了进一步补充,来自value 的数据稍后将与其他方法(数据插补)在其位置插补的值进行比较,因此我需要原始数据集中已删除值的位置。

【问题讨论】:

  • 这个问题对我来说有点不清楚。您声明,您想保存 30% 的值,但在代码中您使用了 30% 的行。
  • 是的,因为我打算每行选择 1 个值,然后保存并删除它。编辑:你说得对,我想删除 30% 的值,但选择了行

标签: python pandas numpy dataframe random


【解决方案1】:

给定一个二维 numpy 矩阵 m,此方法将返回一个长度为 0.3*m.size 的数组,其中包含长度为 3 的数组,其中包含一个随机值及其以 m 为单位的坐标。

def pickRand30(data):
    rand = np.random.choice(np.arange(data.size), size = int(data.size*0.3))
    indexes1 = rand//data.shape[1]
    indexes2 = rand%data.shape[1]
    return np.array((data[indexes1, indexes2], indexes1, indexes2)).T

您可以使用其坐标删除条目,但是您可能希望查看masked arrays 而不是从矩阵中删除单个条目。

【讨论】:

  • 它可以很好地选择列和行上值的随机位置,但返回会丢弃“TypeError: unhashable type: 'numpy.ndarray'”。我正在努力解决它
  • 好的。它有效,您必须将 pd Dataframe 转换为 numpy 数组,然后将其传递给函数 - 只需使用 iris = iris.values
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多