Печать позиций MATRIX значений в матрице (Python)

1

У меня есть матрица с некоторыми значениями. Я хочу получить m, n позиций каждого значения в отдельную матрицу.

import numpy as np

a = np.zeros((3,3)) #Creating "a" matrix with all zeros
vals = [22,34,43,56,37,45] # the values that i want to add to the matrix "a"
pos = [(0,1),(0,2),(1,0),(1,2),(2,0),(2,1)] # Corresponding positions of the above given values

rows, cols = zip(*pos)   # This code is to assign the given values in the correct position

a[rows, cols] = vals

print (a)

output =

[[(0,0) (0,1) (0,2)]

[(1,0) (1,1) (1,2)]

[(2,0) (2,1) (2,2)]]

пожалуйста, помогите мне.

Я хочу получить матрицу положения (m, n) любой матрицы (m, n)

  • 0
    Я не понимаю связи между тем, что ты сказал, и тем, что есть в твоем куске кода. Не могли бы вы отредактировать пост, чтобы добавить ссылки на переменные в коде? Потому что в настоящее время я не понимаю, что вы хотите
  • 0
    Спасибо! Подумайте о матрице трафика. У него есть источник, откуда приходит трафик, и пункт назначения, куда он направляется. Существует значение для каждого трафика, который идет от источника к месту назначения. Теперь мне дают список значений трафика с источниками и пунктами назначения. Я хочу автоматически ввести эти данные в матрицу, где источники отображаются из строк, а пункты назначения - из столбцов. Позже я хочу сослаться на источник, пару назначения, соответствующую 1 значению трафика. Поэтому я хочу создать другую матрицу с тем же измерением, которая заполнена парами источник-назначение
Показать ещё 1 комментарий
Теги:
position
matrix
m
n

2 ответа

0
Лучший ответ

Согласно моему пониманию, используйте ниже код приложения (проверенный в python 3.6.2):

import numpy as np
matrixlist=[]
tuple1=()
list1=[]
list1=tuple(tuple1)
rows= 3
cols=3

a = np.zeros((rows*cols))
for i in range(rows):
    list1=[]
    list1.append(i)
    t1=tuple(list1)
    for j in range(cols):
        list1=list(t1)
        list1.append(j)
        t2=tuple(list1)
        matrixlist.append(t2)
        list1.remove(list1[0])
data=[]
data= matrixlist
i=0
m=[data[i:i+cols] for i in range(0, len(data), cols)]
print(m)

Выход:

[[(0, 0), (0, 1), (0, 2)], [(1, 0), (1, 1), (1, 2)], [(2, 0), (2, 1), (2, 2)]]

Надеюсь, это полностью заполнит ваше требование!

  • 1
    Да, это прекрасно.
  • 0
    @ShenuAmaya Вы видели мой ответ? Это намного проще и дает почти тот же результат. Исключением является то, что внутренние элементы не являются кортежами. Или это тоже было требованием?
Показать ещё 1 комментарий
0

Если я правильно понял, вам нужно добавить следующий код после извлечения rows и cols:

a = np.array([[(i, j) for j in range(max(cols)+1)] for i in range(max(rows)+1)])
print(a)

Выход:

[[[0 0] [0 1] [0 2]]  [[1 0] [1 1] [1 2]]  [[2 0] [2 1] [2 2]]]

извлекает количество столбцов и строк, которые у вас есть в вашей матрице, добавьте 1 (поскольку range по умолчанию открыт в верхней границе интервала), а затем заполнить его значениями строк и столбцов токов. Если вы заранее знаете размерную матрицу o, вы можете заменить значения внутри диапазона следующим образом:

a = np.array([[(i, j) for j in range(3)] for i in range(3)])

В противном случае вы можете оставить это как указано выше и разместить его в списке источников/получателей.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню