您好我正在尝试将一些Matlab代码转换为Python。
这是Matlab代码:
[n,i] = sort(n);
n已被定义为包含数据的数组,但就我所见,我并未在整个代码中定义为任何内容。这就是我试图做的事情:
[n,i] = n.sort(axis = 0)
但它说"' NoneType'对象不可迭代"
我知道n中有数据,所以如何处理i?
在我的matlab代码中降低:
y = y(i)
这是什么意思,我该如何将其转换为Python?
答案 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]
分别为n
和i
。
如果n
很大(我们真的在这里排序两次),这是非常低效的,但它是相当可读的。如果速度真的很重要,我建议使用此处概述的方法:How to get indices of a sorted array in Python