我有一个包含大量元素的数据集,其中每个数据元素都有一个时间、一些元数据和一个值。该集中有许多单独的数据类型。所有信息都经过数字编码并存储为 numpy 数组。我需要将这个 1xn 数据流排序到一个数组中,其中每行都是唯一的时间,列代表当时的不同数据。我已经使用 MATLAB 的 union 函数在 MATLAB 中解决了这个问题(不同的方式,但故事会再讲)。我想在 python 中复制这个,但是我已经被困了几天试图完成这个任务。
我已将唯一排序的时间值提取到 1xm 数组中(以下示例中的 a
)。我还提取了数据类型的每个元素,该数据类型也是唯一的且已排序(下面示例中的 b
)。 b
始终是a
的子集。以下 MATLAB 代码展示了其工作原理。
a = [1,2,3,4,5,6,7,8,9,10]
b = [1,4,7,10]
[C,ib,ia] = union(b,a)
C =1
1 2 3 4 5 6 7 8 9 10
ib =
1
2
3
4
ia =
2
3
5
6
8
9
mask = ones(size(a))
mask(ia)=0
data_column(mask == 1) = data_vector(ib);
输出ia
是a
的索引,它与b
中的值不对应。使用 ia 制作逻辑掩码,然后我可以快速将数据分配到所需行列输出数组格式中的正确行。
在 python 中,numpy.union1d(b,a)
给出输出 C
,但不给出索引;这就是我想在这里找到的。
最佳答案
由于您假设以下内容:
a
和b
均已排序b
是a
的子集
- 环境中可用 numpy 库
- 不需要索引,只需要值
你能使用numpy.setdiff1d
吗?
>>> import numpy
>>> a = [1,2,3,4,5,6,7,8,9,10]
>>> b = [1,4,7,10]
>>> numpy.union1d(a,b)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> numpy.setdiff1d(a,b)
array([2, 3, 5, 6, 8, 9])
关于python - 在 python 中复制 MATLAB 联合的索引输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57923490/