【问题标题】:How do I add rows within python arrays that are indexed by elements of another array?如何在 python 数组中添加由另一个数组的元素索引的行?
【发布时间】:2021-05-24 04:22:13
【问题描述】:

我试图在一组 10 行中找出一行的 3 个最近邻居(每 10 行是一个类),然后对这 3 个邻居进行平均。

我需要对一个 400 行的数组执行此操作,其中每个连续的 10 行属于一个类。

我想我已经设法为下面的“索引”中的每一行捕获了 3 个最近的邻居。 在下面的输出中,“indices”是一个 10x3 矩阵。 我只是不确定如何在原始 xclass 中引用每行“索引”的 3 个元素所引用的那些特定的 3 行,然后将它们相加(挑战),然后除以 3 以获得平均值(我假设这种划分是直截了当的)。

在以下回复后更新了此段: 基本上,X 的尺寸为 400x4096 索引可以是例如 [[1,3,5],[2,4,8].....] 我需要做的是平均 X 的第 1,3 和 5 行,并获得形状为 1x4096 的结果行。 类似地,平均 X 的第 2、4、8 行,并为该集合获取一个新行,依此类推,以获取索引中的每一行。 所以基本上特定行索引中的每个元素都引用 X 中的特定行。 '''

for counter in range(0,399,10):
    #print(counter)
    xclass=X[counter:counter+9]
    yclass=y[counter:counter+9]
    #print(xclass)
    nbrs = NearestNeighbors(n_neighbors=3, algorithm='brute').fit(xclass)
    distances, indices = nbrs.kneighbors(xclass)
    #print(indices)

'''

欣赏任何见解。

【问题讨论】:

  • 你的意思是 [counter:counter+10],因为 [counter:counter+9] 只切片 9 个项目?
  • 是的,它的 10 行独立切片从 400 行的整体数据集 (X) 中形成一个类。

标签: python arrays indexing


【解决方案1】:

我假设您使用的是 numpy(或类似的东西)。通常,您可以采用任何索引数组并使用它来捕获另一个数组中感兴趣的特定条目。例如,

import numpy as np

#Accessing an array by an indexing array. 
X = np.arange(30).reshape(6,5) #6, 5 long vectors
I = [[0,1,2],[3,4,5]]          #I wish to collect vectors 0,1,2 together and vectors 3,4,5 together
C = X[I,:]                     #Will be a 2 by 3 by 5. 2 collections of 3 5-long vectors.
print(C)    

#Computations for averaging those collected arrays. 
#Note that C is shape (2,3,5), we wish to average the 3s together, hence we need to 
#average along the middle axis (axis=1). 
A = np.average(C,axis=1)
print(A)

更多关于X[I,:]的细节。一般来说,我们在这里所做的是指定要在我们的数组 X 中捕获的所有 x 坐标和所有 y 坐标。因为,我们想要 X 中的完整向量,我们不关心 y 坐标并且想要捕获所有这些,因此:。同样,我们想一次拉 3 个 x 坐标,所以我们指定拉 [0,1,2],然后拉 [3,4,5]。您可以将它们更改为您希望的任何索引。

【讨论】:

  • 基本上,X 的尺寸为 400x4096 索引可以是例如 [[1,3,5],[2,4,8].....] 我需要做的是平均行X 的 1,3 和 5 并获得形状为 1x4096 的结果行。类似地,平均 X 的第 2、4、8 行,并为该集合获取一个新行,依此类推,以获取索引中的每一行。所以基本上特定行索引中的每个值都引用 X 中的特定行。
【解决方案2】:

您可以在 python 中使用这样的词来索引列表...

a = ['aaa', 'bbb', 'ccc']

b = a[a.index('aaa')]

print(b)

output: aaa

也喜欢……

a = ['aaa', 'bbb', 'ccc']


word = 'aaa'
b = a[a.index(word)]

print(b)

output: aaa

所以可以做类似...

a = ['aaa', 'bbb', 'ccc']


word = 'aaa'
b = a[a.index(word+1)]

print(b)

output: bbb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    • 2011-11-04
    • 2021-11-24
    • 2022-12-14
    • 2013-07-19
    相关资源
    最近更新 更多