我想创建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
解决了这个问题后,您可能也有兴趣了解使用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]]]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。