【问题标题】:numpy append in a for loop with different sizesnumpy 附加在不同大小的 for 循环中
【发布时间】:2022-01-24 09:13:15
【问题描述】:

我有一个 for 循环,但我有 2 的变化,我想在每次迭代中将一个值保存在一个 numpy 数组中,该值变化 1。

n = 8 #steps

# random sequence
rand_seq = np.zeros(n-1)

for i in range(0, (n-1)*2, 2):
    
    curr_state= i+3
  

我想在 rand_seq 数组的循环外获取 curr_state(七个值)。

你能帮我吗?

非常感谢

【问题讨论】:

  • 对于这样的迭代,我建议从列表开始,甚至是列表理解。初学者应该更容易理解。

标签: numpy for-loop


【解决方案1】:

一个更简单的版本(如果我理解正确的话)是:

np.arange(3, 15+1, 2)

其中 3 = 开始,15 = 停止,2 = 步长。

一般来说,使用 numpy 时尽量避免在 for 循环中添加元素,因为这样效率低下。我建议查看np.arange()np.array()np.zeros() 的文档,根据我的经验,这些将解决 90% 的数组创建问题。

【讨论】:

  • 对不起,我不明白,我用 np.arange(0,8,2) 更改了 np.zeros,但是当我编写最后一个命令 rand_seq[i]=curr_state 时出现错误为了将每个值从 for 循环中放入 rand_seq。显然循环中发生的事情更复杂,但最后我有一个值(curr_state),我想在每次迭代后将它存储在外部。
  • 对不起,我不明白。你能提供输出应该是什么样子吗?
  • 是的,我当然想要: rand_seq=[3, 5, 7, 9, 11, 13, 15] ,其中每个值都是每次迭代中的 curr_state 变量。很抱歉造成混乱
  • 我编辑了答案,所以现在它产生了你提到的输出。
  • 谢谢,但是我把它放在哪里了?在代码中?对不起,我是初学者!
【解决方案2】:

简单的列表迭代:

In [313]: alist = []
     ...: for i in range(0,(8-1)*2,2):
     ...:     alist.append(i+3)
     ...: 
In [314]: alist
Out[314]: [3, 5, 7, 9, 11, 13, 15]

或转换为列表推导:

In [315]: [i+3 for i in range(0,(8-1)*2,2)]
Out[315]: [3, 5, 7, 9, 11, 13, 15]

或者如果你创建一个具有相同范围参数的数组:

In [316]: arr = np.arange(0,(8-1)*2,2)
In [317]: arr
Out[317]: array([ 0,  2,  4,  6,  8, 10, 12])

您可以用一个简单的表达式添加3

In [318]: arr + 3
Out[318]: array([ 3,  5,  7,  9, 11, 13, 15])

对于列表,迭代和理解非常棒。使用numpy,您应该尝试创建一个数组,例如使用arange,并使用整个数组方法(而不是迭代)修改它。

【讨论】:

  • 感谢您的回答,但问题是循环做了一些更复杂的事情。我只是试着举一个简单的例子。我将尝试完全编辑问题,或删除此问题并发布新问题。很抱歉造成混乱
猜你喜欢
  • 2018-04-17
  • 1970-01-01
  • 2013-12-24
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多