gpt4 book ai didi

python - 带有列表生成器的 numpy fromiter

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:44 34 4
gpt4 key购买 nike

import numpy as np
def gen_c():
c = np.ones(5, dtype=int)
j = 0
t = 10
while j < t:
c[0] = j
yield c.tolist()
j += 1

# What I did:
# res = np.array(list(gen_c())) <-- useless allocation of memory

# this line is what I'd like to do and it's killing me
res = np.fromiter(gen_c(), dtype=int) # dtype=list ?

错误说 ValueError: setting an array element with a sequence.

这是一段非常愚蠢的代码。我想从生成器创建一个列表数组(最后是一个二维数组)...

虽然我到处搜索,但我仍然无法弄清楚如何让它工作。

最佳答案

您只能使用 numpy.fromiter()创建在 documentation of numpy.fromiter 中给出的一维数组(不是二维数组) -

numpy.fromiter(iterable, dtype, count=-1)

Create a new 1-dimensional array from an iterable object.

您可以做的一件事是转换您的生成器函数以从 c 中给出单个值,然后从中创建一个一维数组,然后将其 reshape 为 (-1,5) 。示例 -

import numpy as np
def gen_c():
c = np.ones(5, dtype=int)
j = 0
t = 10
while j < t:
c[0] = j
for i in c:
yield i
j += 1

np.fromiter(gen_c(),dtype=int).reshape((-1,5))

演示 -

In [5]: %paste
import numpy as np
def gen_c():
c = np.ones(5, dtype=int)
j = 0
t = 10
while j < t:
c[0] = j
for i in c:
yield i
j += 1

np.fromiter(gen_c(),dtype=int).reshape((-1,5))

## -- End pasted text --
Out[5]:
array([[0, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[2, 1, 1, 1, 1],
[3, 1, 1, 1, 1],
[4, 1, 1, 1, 1],
[5, 1, 1, 1, 1],
[6, 1, 1, 1, 1],
[7, 1, 1, 1, 1],
[8, 1, 1, 1, 1],
[9, 1, 1, 1, 1]])

关于python - 带有列表生成器的 numpy fromiter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32997108/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com