gpt4 book ai didi

python - 重新排列 numpy 数组

转载 作者:行者123 更新时间:2023-11-28 18:22:23 24 4
gpt4 key购买 nike

我需要解析两个对象的时间相关位置,并在 numpy 数组中获取数据:

data = [[0, 1, 2],
[1, 4, 3],
[2, 2, 1]]

因此第一列表示一个位置,第二列表示时间点 A 处于该特定位置,最后一列时间点 B 位于该位置。保证数据是一致的,即如果任意两行具有相同的时间 - 它们具有相同的位置,在伪代码中:

data[row1,1] == data[row2,1]  <=>  data[row1,0] == data[row2,0]
data[row1,2] == data[row2,2] <=> data[row1,0] == data[row2,0]

我希望以某种方式重铸这个数组,以便它枚举所有可用的时间和相应的位置,例如:

parsed = [[1, 0, 2],
[2, 2, 0],
[3, np.nan, 1],
[4, 1, np.nan]]

这里,第一列是时间,第二列是A点的位置,第三列是B点的位置。当我没有关于点位置的信息时,应该分配np.nan。我目前所做的是将数据数组分成两个单独的数组:

    moments = set (data [:, 1:3].flatten())

for each in moments:
a = data[:,[1,0]][pos[:,1] == each]
b = data[:,[2,0]][pos[:,2] == each]

然后我重新合并了 John Galt's answer here 中所做的.这以某种方式起作用,但我真的希望有更好的解决方案。谁能朝正确的方向踢我?

最佳答案

这是使用 NumPy 数组初始化和赋值的一种方法 -

# Gather a and b indices. Get their union, that represents all posssible indices
a_idx = data[:,1]
b_idx = data[:,2]
all_idx = np.union1d(a_idx, b_idx)

# Setup o/p array
out = np.full((all_idx.size,3),np.nan)

# Assign all indices to first col
out[:,0] = all_idx

# Determine the positions of a indices in all indices and assign first col data
out[np.searchsorted(all_idx, a_idx),1] = data[:,0]
# Similarly for b
out[np.searchsorted(all_idx, b_idx),2] = data[:,0]

np.searchsorted在这里就像天赐之物,因为它为我们提供了我们需要从已排序数组 data 中放入 ab 的位置 all_idx 并且被认为是非常有效的。

给定样本数据的输出-

In [104]: out
Out[104]:
array([[ 1., 0., 2.],
[ 2., 2., 0.],
[ 3., nan, 1.],
[ 4., 1., nan]])

关于python - 重新排列 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44141124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com