我想在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获得相同的结果?谢谢你们。
答案 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])
并且可以正常工作