python - 在 python 中复制 MATLAB 联合的索引输出

标签 python matlab numpy

我有一个包含大量元素的数据集,其中每个数据元素都有一个时间、一些元数据和一个值。该集中有许多单独的数据类型。所有信息都经过数字编码并存储为 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);  

输出iaa的索引,它与b中的值不对应。使用 ia 制作逻辑掩码,然后我可以快速将数据分配到所需行列输出数组格式中的正确行。

在 python 中,numpy.union1d(b,a) 给出输出 C,但不给出索引;这就是我想在这里找到的。

最佳答案

由于您假设以下内容:

  • ab 均已排序
  • ba
  • 的子集
  • 环境中可用 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/

相关文章:

python - Python 中的 All-to-All 线程通信

Matlab:具有混合字符/双条目的单元格列 - 如何使所有数字?

matlab - 调用 MATLAB 类实例的副作用不会持续存在

python - Python中的2D卷积类似于Matlab的conv2

python - 从字典列表创建一个 Record 数组

python - 获取 zarr 数组切片的 View

python - 在Python中使用gdal从csv文件生成tiff文件

python - SQLAlchemy : Relationship with grandson

Python - 拟合二维矩形数据

python - 无法重新采样然后绘制 Pandas 数据框