【问题标题】:python Numpy arrays in array using nested for looppython Numpy数组在数组中使用嵌套for循环
【发布时间】:2021-01-04 03:28:03
【问题描述】:

我正在尝试创建一个包含子数组的 numpy 数组。我正在寻找的输出应该是这样的:

[[0.   1.5  3.   4.5  6.   7.5  9.  10.5 12.  13.5 15.  16.5 18.  19.5
 21.  22.5 24.  25.5 27.  28.5 30.] [0.   1.5  3.   4.5  6.   7.5  9.  10.5 12.  13.5 15.  16.5 18.  19.5 21]......]

但我得到的只是一个数组,如下所示

[0.   1.5  3.   4.5  6.   7.5  9.  10.5 12.  13.5 15.  16.5 18.  19.5
 21.  22.5 24.  25.5 27.  28.5 30. 0.   1.5  3.   4.5  6.   7.5  9.  10.5 12.  13.5 15.  16.5 18.  19.5 21........]

背景是我有一个名为“b”的数组。该数组看起来像这样: [数组([421.3, 448.6, 449.32171103, 444.28498751, 449.36065693、448.75383007、449.25048692、448.75383007、 448.59001326、448.64239657、448.64239657、448.00558032、 448.00558032、447.93972809、448.44620636、447.93972809、 447.93972809, 447.87609894, 447.64383163, 447.6985593, 447.21918563]), 数组([447.75551365, 447.75551365, 448.36146132, 447.75551365, 447.75551365、447.75551365、447.75551365、448.36146132、 447.6985593, 448.36146132, 447.6985593, 447.59133146, 447.6985593、447.54105957、447.64383163、447.54105957、 446.87805943、446.87805943、446.75720475、446.70012313、 446.70012313、446.70012313、446.64527312、446.64527312、 446.14907822, 445.88002871, 445.70169396, 445.29989894]).......] 我需要绘制每个数组,并且我想使用下面的代码创建另一个长度匹配但内容不同的类似数组。 这是我的代码,你能建议如何解决这个问题吗?

tt=np.array([])

for i in range(len(array_size)):
    time_calc_1=0
    for j in range(len(b[i])):
    
        tt=np.append(tt,time_calc_1)
        time_calc_1=time_calc_1+1.5

【问题讨论】:

  • np.append 文档说,如果没有轴参数,输入会被分解(1d)并连接在那个轴上 - 因此结果始终是 1d。 不要np.append视为列表追加克隆。

标签: python arrays python-3.x numpy for-loop


【解决方案1】:

不要循环和追加到数组。这是个坏主意。而是使用函数来实现您的目标:

tt = np.repeat(np.arange(0,31,1.5)[None,:],25,0)

输出:

[[ 0.   1.5  3.   4.5  6.   7.5  9.  10.5 12.  13.5 15.  16.5 18.  19.5
  21.  22.5 24.  25.5 27.  28.5 30. ]
 [ 0.   1.5  3.   4.5  6.   7.5  9.  10.5 12.  13.5 15.  16.5 18.  19.5
  21.  22.5 24.  25.5 27.  28.5 30. ]
 [ 0.   1.5  3.   4.5  6.   7.5  9.  10.5 12.  13.5 15.  16.5 18.  19.5
  21.  22.5 24.  25.5 27.  28.5 30. ]
...

更新:如果是可变长度数组,(我建议使用列表列表,但如果坚持使用数组数组):

列表列表:

b = [10,20,30]
tt = [np.arange(0,i,1.5).tolist() for i in b]
#[[0.0, 1.5, 3.0, 4.5, 6.0, 7.5, 9.0], [0.0, 1.5, 3.0, 4.5, 6.0, 7.5, 9.0, 10.5, 12.0, 13.5, 15.0, 16.5, 18.0, 19.5], [0.0, 1.5, 3.0, 4.5, 6.0, 7.5, 9.0, 10.5, 12.0, 13.5, 15.0, 16.5, 18.0, 19.5, 21.0, 22.5, 24.0, 25.5, 27.0, 28.5]]

数组数组:

b = [10,20,30]
tt = np.array([np.arange(0,i,1.5) for i in b])
#[array([0. , 1.5, 3. , 4.5, 6. , 7.5, 9. ])
# array([ 0. ,  1.5,  3. ,  4.5,  6. ,  7.5,  9. , 10.5, 12. , 13.5, 15. ,  16.5, 18. , 19.5])
# array([ 0. ,  1.5,  3. ,  4.5,  6. ,  7.5,  9. , 10.5, 12. , 13.5, 15. ,  16.5, 18. , 19.5, 21. , 22.5, 24. , 25.5, 27. , 28.5])]

【讨论】:

  • 抱歉,我的代码不清楚。在我的情况下,数组的大小可能会有所不同。它没有像我在问题代码中那样修复。两个循环的范围可能因变量的大小而异。 tt=np.array([]) for o in range(array_size): time_calc_1=0 for oo in range(b[o])): tt= np.append(tt,time_calc_1) time_calc_1=time_calc_1+1.5
  • @Malik 你仍然可以用函数做很多事情。您能否为您的案例提供一个更现实的例子,以便我们提供更好的帮助?另请注意,您不能有非矩形数组。
  • @Malik 根据您在评论中的更新,您不能拥有非矩形数组(例如,[[1,2],[3]] 在 numpy 中不存在)。我建议建立一个列表列表。但是,另一种不推荐的方法是数组/列表数组(这在使用 numpy 方面毫无用处)。如果您将问题重写为所需的正确输出,我可以在此处更新答案。谢谢。
  • 在我的例子中,数组 b[] 包含不同长度的子数组。我想要做的是生成另一个具有与 b[] 长度相同但内容不同的子数组的数组。在这种情况下,array_size 是 25,但可能不同
  • 但是使用数组数组有什么意义呢?尽管如此,我会更新答案以包括这样的例子。
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2017-08-21
  • 2018-10-04
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多