numpy копирование данных из одного массива в другой - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть проблема, когда у меня есть массив numpy 1-D размера (622, 1), который мне нужно изменить в массив формы (3, 3, 3, 64) или размера (1728,) , Таким образом, для данного конкретного примера после копирования меньшего массива в больший массив оставшиеся 1106 (1728 - 622) значения должны быть равны нулю.

ПРИМЕЧАНИЕ: numpy массив, содержащий (622, 1), имеет некоторые вычисленные значения в нем.

Если я использую что-то вроде -

b = np.copy(a)

, где 'a' - это массив np размером 622, а 'b' - это массив формы np (3, 3, 3, 64). Однако этот np.copy () не выполняет то, что я хочу.

Как скопировать 622 ненулевых значения в больший массив.

Я использую Python 3.8 и numpy 1,18.

Спасибо!

Ответы [ 3 ]

1 голос
/ 27 апреля 2020

Вы можете создать массив 1D нулей b, а затем присвоить его первым значениям a, а затем изменить его на любую понравившуюся вам форму:

a = np.ones((622, 1))
b = np.zeros((1728,1))
b[:a.shape[0]] = a
b = b.reshape((3,3,3,64))

output:

[[[[1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]]

  [[1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]]

  [[1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]
   [1. 1. 1. ... 1. 1. 1.]]]


 [[[1. 1. 1. ... 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.]
   [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.]]]]
1 голос
/ 27 апреля 2020

Одно из возможных решений:

# Create the first array (it the target code you have it)
tbl = np.arange(622).reshape(-1, 1)
# Create the second array
tbl2 = np.zeros(1106, dtype='i4').reshape(-1, 1)
# Create the result
res = np.concatenate((tbl, tbl2)).reshape(3, 3, 3, -1)

Если вы не уверены в форме res , запустите: res.shape, и результат должен быть:

(3, 3, 3, 64)
1 голос
/ 27 апреля 2020

Если у вас есть два массива, вы можете использовать их длину для правильного индексирования, например:

import numpy as np

a = np.arange(622)
b = np.zeros(1728)

b[:len(a)] = a

, а затем вы можете изменить b после этого.

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