开发者社区> 问答> 正文

用np.tile生成(n,1,2)数组

一码平川MACHEL 2019-01-23 14:55:56 546

我想创建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]]]]

Python
分享到
取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:39

    问题是你的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]]]

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题