Генерация (n, 1, 2) массивов с np.tile - PullRequest
0 голосов
/ 22 января 2019

Я хочу создать n (1,2) массивов, и каждый массив должен иметь одинаковые элементы.Сначала я генерирую n раз 1 D массив, а затем использую цикл для итерации по этим элементам и повторяю каждый элемент для заполнения (n, 1,2) массива.мой код следующий:

import numpy as np


def u_vec():
   return np.array([np.random.rand(1)])

n=10
u1 = np.zeros(n)

for i in range(n):
    u1[i] = u_vec()

print(u1)

def u_vec1():
    u_vec = np.zeros((n, 2,1))
    for i in range(len(u1)):
        u_vec[i] += np.tile(u1[i], (2,1))
    return u_vec

u = u_vec1()
print(u)

вывод, который я получаю:

[0.4594466  0.80924903 0.3186138  0.03601917 0.9116031  0.68199505
 0.78999837 0.33778259 0.97626521 0.84925156]


[[[0.4594466 0.4594466]]

[[0.        0.       ]]

[[0.        0.       ]]

[[0.        0.       ]]

[[0.        0.       ]]

[[0.        0.       ]]

[[0.        0.       ]]

[[0.        0.       ]]

[[0.        0.       ]]

[[0.        0.       ]]]

Я не понимаю, почему заполнен только первый элемент, а остальные заполнены нулями.Может ли кто-нибудь помочь мне?Большое спасибо!вывод, который я хотел бы иметь

[[[0.4594466 0.4594466]]

[[0.3186138  0.3186138]]

[[ 0.03601917 0.03601917]]

[[ 0.9116031  0.9116031 ]]

[[0.68199505  0.68199505]]

[[0.78999837  0.78999837]]

[[0.33778259  0.33778259]]

[[0.97626521   0.97626521]]

[[0.84925156   0.84925156]]]]

1 Ответ

0 голосов
/ 22 января 2019

Я вижу проблему. Проблема в том, что ваш оператор return u_vec заключен в цикл for. Таким образом, только первый подмассив обновляется случайными значениями, а остальная часть u_vec остается 0, потому что вы возвращаете сразу после первой итерации цикла for. Вы должны использовать

def u_vec1():
    u_vec = np.zeros((n, 2,1))
    for i in range(len(u1)):
        u_vec[i] += np.tile(u1[i], (2,1))
    return u_vec # <---- moved outside the for loop

Решив эту проблему, вам также может быть интересно узнать альтернативное решение, используя repeat и reshape, чтобы получить желаемый результат как

import numpy as np

n=10
u1 = np.random.rand(n)
print(u1)

u = np.repeat(u1,2).reshape((n,2,1))
print(u)

[0.17106854 0.7346424  0.53370937 0.39838919 0.42247593 0.61545304
 0.97014742 0.85912941 0.51137618 0.08148184]
[[[0.17106854]
  [0.17106854]]

 [[0.7346424 ]
  [0.7346424 ]]

 [[0.53370937]
  [0.53370937]]

 [[0.39838919]
  [0.39838919]]

 [[0.42247593]
  [0.42247593]]

 [[0.61545304]
  [0.61545304]]

 [[0.97014742]
  [0.97014742]]

 [[0.85912941]
  [0.85912941]]

 [[0.51137618]
  [0.51137618]]

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