【问题标题】:How to select in a numpy array all paris with a defined index difference?如何在 numpy 数组中选择所有具有已定义索引差异的巴黎?
【发布时间】:2023-02-07 23:37:45
【问题描述】:

假设我有这个 numpy 数组:

import numpy as np
np.random.seed(0)
data = np.random.normal(size=(5,5))

结果是:

我想选择每行具有特定索引距离的所有对。 例如,如果我选择沿每一行的索引距离 4,我希望有:

res[0,0]=1.76,res[0,1]=2.24
res[1,0]=0.40,res[1,1]=1.86 

res[2,0]=-0.97,res[2,1]=-0.10
res[3,0]=0.95,res[3,1]=0.41

...
....

我现在可以用 for 循环来做到这一点,但我想要更聪明的东西。我本来想创建两个索引列表,然后填充 res,但我也需要一个循环。

最好的

【问题讨论】:

  • 为什么是res[1,0]=0.40?你是怎么计算的?
  • 资源[1,0]=数据[0,1]。我可能不清楚。基本上,它们都是 i 索引差异为 4 的所有对,其中 data[i,j]。 res[0,:] 是对的第一个成员,red[1,0] 是第二个成员。

标签: python numpy select indexing


【解决方案1】:

我想这符合

win=3 # Size of window. You say 4, but what you describe is 3 in my view. But you know how to add 1 if needed :D

np.hstack((data[:, :data.shape[1]-win].reshape(-1,1), data[:, win:].reshape(-1,1)))

应该做

结果是

array([[ 1.76405235,  2.2408932 ],
       [ 0.40015721,  1.86755799],
       [-0.97727788, -0.10321885],
       [ 0.95008842,  0.4105985 ],
       [ 0.14404357,  0.12167502],
       [ 1.45427351,  0.44386323],
       [ 0.33367433,  0.3130677 ],
       [ 1.49407907, -0.85409574],
       [-2.55298982, -0.74216502],
       [ 0.6536186 ,  2.26975462]])

解释:
data[:,:data.shape[1]-win]

array([[ 1.76405235,  0.40015721],
       [-0.97727788,  0.95008842],
       [ 0.14404357,  1.45427351],
       [ 0.33367433,  1.49407907],
       [-2.55298982,  0.6536186 ]])

所以,只有 data 的第一列。列数,data.shape[1]-win,是数据宽度和获胜大小的可能列数。

同样,data[:, win:]

array([[ 2.2408932 ,  1.86755799],
       [-0.10321885,  0.4105985 ],
       [ 0.12167502,  0.44386323],
       [ 0.3130677 , -0.85409574],
       [-0.74216502,  2.26975462]])

这次是最后一列(相同数量的列),但由 win 索引分隔。

.reshape(-1,1) 垂直展平那些数据,如果我可以使用这个“垂直展平”描述的话。例如data[:,:data.shape[1]-win].reshape(-1,1) 是相同的,但有 10 行 1 列而不是 5 行 2 列。

array([[ 1.76405235],
       [ 0.40015721],
       [-0.97727788],
       [ 0.95008842],
       [ 0.14404357],
       [ 1.45427351],
       [ 0.33367433],
       [ 1.49407907],
       [-2.55298982],
       [ 0.6536186 ]])

hstack把这两个放在一起。

【讨论】:

    猜你喜欢
    • 2020-03-21
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多