Octave扩展切片阵列; Python没有

时间:2015-08-12 15:08:06

标签: python matlab numpy

我想在Python上做一些Matlab / Octave索引,但我找不到相同的代码。 Octave似乎扩展了切片阵列,而Python则没有。请检查以下代码:

八度:

>> A = [1 2 3; 4 5 6; 7 8 9];
>> xe = [1 1 2 3 3];
>> A(xe,:)
ans =
1   2   3
1   2   3
4   5   6
7   8   9
7   8   9

的Python:

>>> A = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> aux = np.array([1, 1, 2, 3, 3])
>>> A[aux,:]
Traceback (most recent call last):

File "<ipython-input-248-7ed394388336>", line 1, in <module>
A[aux,:]

IndexError: index 3 is out of bounds for axis 0 with size 3

还试过numpy.take

>>> A.take(aux)
array([2, 2, 3, 4, 4])

我如何使用Python获得相同的结果?谢谢你们。

2 个答案:

答案 0 :(得分:2)

真正的问题是在Python中索引从0开始,而在Matlab索引中以1开头,因此索引3在你的示例中超出界限

>>> re.findall(r'\w|\[[^\]]+\]',a)
['s', 'd', 'f', 'L', 'K', 'C', '[m2G]', 'T', 'O']

In [2]: A = np.array([[1,2,3],[4,5,6],[7,8,9]]) In [3]: aux = np.array([1, 1, 2, 3, 3]) In [4]: aux = aux - 1 In [5]: A[aux,:] Out[5]: array([[1, 2, 3], [1, 2, 3], [4, 5, 6], [7, 8, 9], [7, 8, 9]]) 也可以工作,但你需要指定轴,否则使用扁平输入数组。

numpy.take

答案 1 :(得分:1)

Python已编入索引,因此将aux更改为aux = np.array([0,0,1,2,2])并且可以正常工作