python - 如何在numpy中的二维矩阵中随机采样

标签 python arrays numpy matrix random

我有一个这样的二维数组/矩阵,我如何从这个二维矩阵中随机选择值,例如获取像 [-62, 29.23] 这样的值.我看着 numpy.choice但它是为一维数组构建的。

下面是我的例子,4行8列

Space_Position=[
      [[-62,29.23],[-49.73,29.23],[-31.82,29.23],[-14.2,29.23],[3.51,29.23],[21.21,29.23],[39.04,29.23],[57.1,29.23]],

      [[-62,11.28],[-49.73,11.28],[-31.82,11.28],[-14.2,11.28],[3.51,11.28],[21.21,11.28] ,[39.04,11.28],[57.1,11.8]],

      [[-62,-5.54],[-49.73,-5.54],[-31.82,-5.54] ,[-14.2,-5.54],[3.51,-5.54],[21.21,-5.54],[39.04,-5.54],[57.1,-5.54]],

      [[-62,-23.1],[-49.73,-23.1],[-31.82,-23.1],[-14.2,-23.1],[3.51,-23.1],[21.21,-23.1],[39.04,-23.1] ,[57.1,-23.1]]
      ]

在答案中给出了以下解决方案:

random_index1 = np.random.randint(0, Space_Position.shape[0])
random_index2 = np.random.randint(0, Space_Position.shape[1])
Space_Position[random_index1][random_index2]

这确实可以给我一个样本,多一个样本怎么样 np.choice()是吗?

我想的另一种方法是将矩阵转换为数组而不是矩阵,

Space_Position=[
      [-62,29.23],[-49.73,29.23],[-31.82,29.23],[-14.2,29.23],[3.51,29.23],[21.21,29.23],[39.04,29.23],[57.1,29.23], .....   ]

最后使用 np.choice() ,但是我找不到进行转换的方法,np.flatten()使数组像

Space_Position=[-62,29.23,-49.73,29.2, ....]

最佳答案

只需使用随机索引(在您的情况下为 2,因为您有 3 个维度):

import numpy as np

Space_Position = np.array(Space_Position)

random_index1 = np.random.randint(0, Space_Position.shape[0])
random_index2 = np.random.randint(0, Space_Position.shape[1])

Space_Position[random_index1, random_index2]  # get the random element.

另一种方法是将其变为 2D:

Space_Position = np.array(Space_Position).reshape(-1, 2)

然后使用一个随机索引:

Space_Position = np.array(Space_Position).reshape(-1, 2)      # make it 2D
random_index = np.random.randint(0, Space_Position.shape[0])  # generate a random index
Space_Position[random_index]                                  # get the random element.

如果你想要 N 样本替换:

N = 5

Space_Position = np.array(Space_Position).reshape(-1, 2)                # make it 2D
random_indices = np.random.randint(0, Space_Position.shape[0], size=N)  # generate N random indices
Space_Position[random_indices]  # get N samples with replacement

或不更换:

Space_Position = np.array(Space_Position).reshape(-1, 2)  # make it 2D
random_indices = np.arange(0, Space_Position.shape[0])    # array of all indices
np.random.shuffle(random_indices)                         # shuffle the array
Space_Position[random_indices[:N]]  # get N samples without replacement

关于python - 如何在numpy中的二维矩阵中随机采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44447179/

相关文章:

python - 使用 dtype float64 创建 pandas dataframe 更改其条目的最后一位数字(相当大的数字)

python - 如何使用 pandas 在 ndarray 上创建索引

java - 如何在 Java 中删除整数数组?

java - 断言等于将字符串和数组列表与 Excel 中的文本数据进行比较

python - 如何在 autobahnPython 中从 ApplicationRunner 获取 react 器

python - 如何处理编码不清楚的字符串

python - 有条件地激活 Flask(Werkzeug) 调试器?

python - 在python中将日期截断为上周一或一周中的任何一天

python - 在python中获取两个一维数组的乘积

python - 使用 keras v2.0 未学习 XOR