Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MATLAB'复制索引输出;python中的s联合_Python_Matlab_Numpy - Fatal编程技术网

从MATLAB'复制索引输出;python中的s联合

从MATLAB'复制索引输出;python中的s联合,python,matlab,numpy,Python,Matlab,Numpy,我有一个包含大量元素的数据集,其中每个数据元素都有一个时间、一些元数据和一个值。集合中有许多独立的数据类型。所有信息都以数字编码并存储为numpy数组。我需要将这个1xn数据流排序到一个数组中,其中每一行都是唯一的时间,列表示当时的不同数据。我已经用MATLAB的union函数在MATLAB中解决了这个问题(不同的方法,但故事还有一段时间)。我想在python中复制这一点,但为了完成这一点,我已经被困了几天 我已将唯一的排序时间值提取到一个1xm数组中(a,在下面的示例中)。我还提取了一个数据类

我有一个包含大量元素的数据集,其中每个数据元素都有一个时间、一些元数据和一个值。集合中有许多独立的数据类型。所有信息都以数字编码并存储为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]=联合(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
遮罩=个(尺寸(a))
遮罩(ia)=0
数据列(掩码==1)=数据向量(ib);
输出
ia
a
的索引,与
b
中的值不对应。使用
ia
制作逻辑掩码,然后我可以快速将数据分配到所需行-列输出数组格式的正确行


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

因为您假设:

  • a
    b
    都已排序
  • b
    a
  • numpy库在环境中可用
  • 不需要索引,只需要值
您可以使用
numpy.setdiff1d

导入numpy >>>a=[1,2,3,4,5,6,7,8,9,10] >>>b=[1,4,7,10] >>>numpy.union1d(a,b) 数组([1,2,3,4,5,6,7,8,9,10]) >>>numpy.setdiff1d(a,b) 数组([2,3,5,6,8,9])
因为您假定:

  • a
    b
    都已排序
  • b
    a
  • numpy库在环境中可用
  • 不需要索引,只需要值
您可以使用
numpy.setdiff1d

导入numpy >>>a=[1,2,3,4,5,6,7,8,9,10] >>>b=[1,4,7,10] >>>numpy.union1d(a,b) 数组([1,2,3,4,5,6,7,8,9,10]) >>>numpy.setdiff1d(a,b) 数组([2,3,5,6,8,9])
您可以使用
unique
和一些排序来定义自己的
union
函数

import numpy as np

def union(a, b):
    ua = np.unique(a)                           # get unique values in input a
    ub = np.unique(b)                           # get unique values in input b
    c = np.concatenate((a, b))                  # combine a and b
    C, ic = np.unique(c, return_index=True)     # call unqiue and return incides

    sel = ic > (a.size - 1)         # every index larger than a.size comes from b
    ia = ic[~sel]
    ib = ic[sel] - a.size

    return C, ia, ib
还有你的测试:

>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> b = np.array([1, 4, 7, 10])
>>> [C, ib, ia] = union(b, a)
>>> C
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
>>> ib
array([0, 1, 2, 3], dtype=int64)
>>> ia
array([1, 2, 4, 5, 7, 8], dtype=int64)

当然索引是一个一个的,因为Matlab从1开始索引,Python从0开始索引。

您可以使用
unique
和一些排序来定义自己的
union
函数

import numpy as np

def union(a, b):
    ua = np.unique(a)                           # get unique values in input a
    ub = np.unique(b)                           # get unique values in input b
    c = np.concatenate((a, b))                  # combine a and b
    C, ic = np.unique(c, return_index=True)     # call unqiue and return incides

    sel = ic > (a.size - 1)         # every index larger than a.size comes from b
    ia = ic[~sel]
    ib = ic[sel] - a.size

    return C, ia, ib
还有你的测试:

>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> b = np.array([1, 4, 7, 10])
>>> [C, ib, ia] = union(b, a)
>>> C
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])
>>> ib
array([0, 1, 2, 3], dtype=int64)
>>> ia
array([1, 2, 4, 5, 7, 8], dtype=int64)

当然,索引是一个一个的,因为Matlab从1开始索引,Python从0开始索引。

多亏了这里发布的建议,我找到了一个相当简洁的答案。使用
numpy.intersect1d()
函数,我能够返回我正在寻找的索引。如下所示:其中,
m
是列索引,
data\u column
最初都是
nan
a
的长度,data\u vector是
b

a = [1,2,3,4,5,6,7,8,9,10]
b = [1,4,7,10]
[C,ia,ib] = numpy.intersect1d(a,b,assume_unique=True,return_indices=True)

print(C)
[ 1  4  7 10]

print(ia)
[0 3 6 9]

print(ib)
[0 1 2 3]

data_column[ia,m] = data_vector

返回索引
功能是关键。我通过阅读numpy集合函数发现了这一点,我是通过提交的答案找到的。我只是不知道去哪里找,谢谢大家

多亏了这里的建议,我找到了一个相当简洁的答案。使用
numpy.intersect1d()
函数,我能够返回我正在寻找的索引。如下所示:其中,
m
是列索引,
data\u column
最初都是
nan
a
的长度,data\u vector是
b

a = [1,2,3,4,5,6,7,8,9,10]
b = [1,4,7,10]
[C,ia,ib] = numpy.intersect1d(a,b,assume_unique=True,return_indices=True)

print(C)
[ 1  4  7 10]

print(ia)
[0 3 6 9]

print(ib)
[0 1 2 3]

data_column[ia,m] = data_vector

返回索引
功能是关键。我通过阅读numpy集合函数发现了这一点,我是通过提交的答案找到的。我只是不知道去哪里找,谢谢大家

感谢我们的输入,我实际上是在寻找索引,而不是值。不过,你的回答给了我正确的方向,所以很有帮助!感谢我们的输入,我实际上是在寻找索引,而不是值。不过,你的回答给了我正确的方向,所以很有帮助!您询问了有关
联合
,然后回答了关于
交叉
?您询问了关于
联合
,然后回答了关于
交叉