【问题标题】:How to select random sample from 4 dimensional numpy array如何从 4 维 numpy 数组中选择随机样本
【发布时间】:2021-08-16 04:18:55
【问题描述】:

我有一个形状为 (100,505,555,2) 的数组。 我需要选择一个较小的样本来计算大小为 100 的点之间的相关性。所以我需要从数组的第二维和第三维中进行选择。例如获取一个大小为 (100,50,50,2) 的数组

我尝试使用

np.random.choice 或 np.random.Generator.choice 但不成功。

你能帮忙吗?

我尝试从第二和第三维度中选择 50*50 个样本来计算每个随机选择的索引之间的协方差:

cov_arr=[]
for i in np.arange(1,50):
    for j in np.arange(1,50):
        ran_i = np.random.randint(555)
        ran_j = np.random.randint(504)
        covariance =np.cov(data[:,ran_i,ran_j,1],
                         data[:,ran_i,ran_j,1])
        cov_arr.append((ran_i,ran_j,covariance[0][1]))

【问题讨论】:

  • 请澄清您的问题。你尝试了什么?您期望得到什么结果?得到了什么结果?
  • 第一个维度是时间索引,第二个和第三个维度是位置(x,y),最后一个是粒子在水平和垂直两个方向上的速度。

标签: python numpy multidimensional-array random sample


【解决方案1】:

注意索引越界!

np.random.randint 中,您必须从随机变量的上限中删除 window_size 的大小。 这样,您的窗口始终包含在您的矩阵中。

以下代码计算每个时间 t 随机选择的两个窗口之间的协方差。

data = np.random.rand(100,505,555,2)

window_size = 50
cov_arr=[]
for t in range(data.shape[0]): #for each time t
    ran_i = np.random.randint(0, data.shape[1]-window_size)
    ran_j = np.random.randint(0, data.shape[2]-window_size)
    covariance =np.cov(data[t,ran_i:ran_i+window_size,ran_j:ran_j+window_size,1],
                     data[t,ran_i:ran_i+window_size,ran_j:ran_j+window_size,1]) #you probably do not want '1' here
    cov_arr.append((ran_i,ran_j,covariance[0][1]))

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 2018-06-07
    • 2018-11-11
    • 2020-02-23
    • 1970-01-01
    • 2014-05-15
    • 2017-09-16
    相关资源
    最近更新 更多