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

标签 python numpy

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

最佳答案

我看到了问题。问题是您的 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

解决了这个问题后,您可能还有兴趣了解使用 repeatreshape 获得所需结果的替代解决方案

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]]]

关于python - 使用 np.tile 生成 (n, 1, 2) 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315043/

相关文章:

python - 如何使用 Elasticsearch-dsl 在 Django 中进行并行测试?

javascript - Websocket 向服务器发送垃圾

python - Python 中的大小递增 Numpy 数组

python - 从 numpy 中的函数返回对子矩阵的引用

python - 我是否需要 Google App Engine 来制作和运行 Facebook 应用程序?

python - 如何将 python 3.3 脚本转换为可执行文件?找到了PyInstaller和py2exe,但是都不支持3.3

python - 如何使用多个保存的模型进行预测?

python - 使用 NumPy 更好的解决方案

python - 舍入到 pandas 数据框中最接近的最小值

python - 使用 pandas/numpy 数据框以另一列的条目(特征值)为条件操作特定列(示例特征)