Замените матричные элементы другими матричными элементами, используя numpy - PullRequest
2 голосов
/ 13 февраля 2020

Я пытаюсь заменить все элементы zero_matrix элементами x, но не уверен, какую именно функцию numpy использовать!

PS: я не хочу использовать python l oop!

> zero_matrix = np.zeros((5, 15), dtype=np.int32)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int32)

> x = [[3822, 510, 4, 1, 20672],
 [3822, 510, 4, 1, 20672, 3822, 510, 4, 1, 20672],
 [3822, 3822, 510, 4, 1, 20672],
 [3822, 510, 510, 4, 1, 20672],
 [3822, 510, 4, 1, 20672, 4, 1, 20672]]

Мой для l oop подход:

for i in range(len(x)):
    zero_matrix[i][:len(x[i])] = x[i]

[[ 3822   510     4     1 20672     0     0     0     0     0     0     0
      0     0     0]
 [ 3822   510     4     1 20672  3822   510     4     1 20672     0     0
      0     0     0]
 [ 3822  3822   510     4     1 20672     0     0     0     0     0     0
      0     0     0]
 [ 3822   510   510     4     1 20672     0     0     0     0     0     0
      0     0     0]
 [ 3822   510     4     1 20672     4     1 20672     0     0     0     0
      0     0     0]]

1 Ответ

2 голосов
/ 13 февраля 2020

Учитывая, что каждая строка в ваших данных выборки имеет неодинаковую длину, вы можете использовать zip_longest, чтобы создать квадратный массив, дополненный нулями. Обратите внимание, что массив необходимо транспонировать, чтобы вернуть его в ожидаемую форму. Затем просто присвойте результат эквивалентному расположению в zero_matrix.

from itertools import zip_longest

a = np.array(list(zip_longest(*x, fillvalue=0))).T
rows, cols = a.shape
zero_matrix[:rows, :cols] = a

>>> zero_matrix
array([[ 3822,   510,     4,     1, 20672,     0,     0,     0,     0,
            0,     0,     0,     0,     0,     0],
       [ 3822,   510,     4,     1, 20672,  3822,   510,     4,     1,
        20672,     0,     0,     0,     0,     0],
       [ 3822,  3822,   510,     4,     1, 20672,     0,     0,     0,
            0,     0,     0,     0,     0,     0],
       [ 3822,   510,   510,     4,     1, 20672,     0,     0,     0,
            0,     0,     0,     0,     0,     0],
       [ 3822,   510,     4,     1, 20672,     4,     1, 20672,     0,
            0,     0,     0,     0,     0,     0]], dtype=int32)
...