Matlab代码我似乎无法转换为Python

时间:2016-05-07 00:50:04

标签: python matlab

您好我正在尝试将一些Matlab代码转换为Python。

这是Matlab代码:

[n,i] = sort(n);

n已被定义为包含数据的数组,但就我所见,我并未在整个代码中定义为任何内容。这就是我试图做的事情:

[n,i] = n.sort(axis = 0)

但它说"' NoneType'对象不可迭代"

我知道n中有数据,所以如何处理i?

在我的matlab代码中降低:

y = y(i) 

这是什么意思,我该如何将其转换为Python?

2 个答案:

答案 0 :(得分:0)

这是直的蟒蛇,还是numpy?

在直接python中,sort方法返回None。 您可以调用已排序的内置函数:

n = sorted(n)

或使用sort方法对数据进行就地排序

n.sort()

后者更有效率。

如果此数据是一个numpy对象,您将需要使用numpy方法,请参阅http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.sort.html

抱歉,我不知道最后一个MatLab表达式意味着什么。

答案 1 :(得分:0)

在查看Matlab的sort文档之后,看起来i代表了原始元素的索引。您可以使用numpy argsort执行此操作,如下所示:

import numpy as np
n = np.array([3, 7, 1, 10, 9, 5, 7])
[n, i] = [np.sort(n), np.argsort(n)]

这将输出:

[ 1  3  5  7  7  9 10]
[2 0 5 1 6 4 3]

分别为ni

如果n很大(我们真的在这里排序两次),这是非常低效的,但它是相当可读的。如果速度真的很重要,我建议使用此处概述的方法:How to get indices of a sorted array in Python