разница между двумя формами матрицы x [i, j] и x [i] [j] - PullRequest
0 голосов
/ 04 сентября 2018

я хочу понять разницу между x[i,j] и x[i][j], где x - матрица

x = np.zeros((N,M))

Ответ, который я нашел при проведении исследования, всегда касается массива с двумерным измерением, но в моем случае у меня есть матрица с двумя индексами для работы с i и j, и мне нужно манипулировать матрицей в соответствии с индексом с помощью цикла for .

    for i in range(1,N+1):
        for j in range(1,M+1):
            x[i-1][j-1]=random.uniform(5,10)

так что вы можете помочь мне понять разницу между x[i,j] и x[i][j] и чтобы быть более понятным для каждого i (базовая станция), есть число j (пользователей)

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Для простого индексирования 2d массива работают обе формы:

In [28]: x = np.arange(6).reshape(2,3)
In [29]: x
Out[29]: 
array([[0, 1, 2],
       [3, 4, 5]])
In [30]: x[1,2]
Out[30]: 5
In [31]: x[1][2]
Out[31]: 5

Для np.matrix (который вы, вероятно, не должны использовать в любом случае) они не являются:

In [32]: X = np.matrix(x)
In [33]: X
Out[33]: 
matrix([[0, 1, 2],
        [3, 4, 5]])
In [34]: X[1,2]
Out[34]: 5
In [35]: X[1][2]
...
IndexError: index 2 is out of bounds for axis 0 with size 1

Эти две формы синтаксически не одинаковы. [1][2] сначала индексирует с 1, а затем индексирует результат с 2. Это не то же самое, что индексирование по обоим параметрам один раз.

In [36]: x[1]
Out[36]: array([3, 4, 5])      # (3,) shape
In [37]: X[1]
Out[37]: matrix([[3, 4, 5]])   # (1,3) shape

Ошибка возникает потому, что np.matrix возвращает еще один np.matrix. Таким образом, следующее индексирование [2] снова будет индексировать первое измерение.

x[1] действительно коротко для x[1,:], то есть индексировать первое измерение и нарезать все остальное (или X[1,...], чтобы учесть 3d и выше). Так что x[1][2] на самом деле

temp = x[1,:]
temp[2]

или для матрицы:

temp = X[1,:]
temp[2,:]

Другими словами, это 2 операции индексации. Это выражение Python, а не конкретное numpy использование.

Когда мы индексируем списки или фрагменты, разница между этими двумя формами становится более значительной, особенно при установке значений.

Я рекомендую новичкам использовать форму x[i,j]. Не используйте x[1][2], если вы действительно не понимаете, что происходит.

При необходимости я могу узнать, как индексирование переводится в вызовы __setitem__ и __getitem__.

0 голосов
/ 04 сентября 2018

Они эквивалентны в соответствии с Руководство Numpy v1.15.1

Примечание В Python x [(exp1, exp2, ..., expN)] эквивалентен x [exp1, exp2, ..., expN]; последний - просто синтаксический сахар для первого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...