- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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/
import numpy as np def gen_c(): c = np.ones(5, dtype=int) j = 0 t = 10 while j < t:
我想使用 numpy.fromiter 构建一个 numpy.array(形状为 (3, 2)) numpy 数组将由 3 个 numpy 数组组成,每个数组包含 2 个 float 。这 3 个数组
我有一个类似于下面的迭代器 it = ((x, x**2) for x in range(20)) 而我想要的是两个数组。其中一个 x 和另一个 x**2 但我实际上并不知道元素的数量,而且我无法从一
我正在尝试通过从 python 生成器中采样来构造一个 np.array,每次调用 next 都会生成一行数组。这是一些示例代码: import numpy as np data = np.eye(9
我有一个返回 numpy 数组的生成器。举个例子,就这样吧: import numpy as np a = np.arange(9).reshape(3,3) gen = (x for x in a)
我有一个非常简单的查询,我正在尝试使用 fromiter() 函数将其转换为 NumPy 数组。但是,我无法弄清楚为什么它不起作用,或者下面的错误是什么意思。有什么想法吗? import numpy
我喜欢使用 numpy 中的 np.fromiter,因为它是一种构建 np.array 对象的资源惰性方式。但是,它似乎不支持多维数组,这也很有用。 import numpy as np def f
为了提高内存效率,我一直在尽可能地将我的一些代码从列表转换为生成器/迭代器。我发现很多情况下我只是将我制作的列表转换为 np.array使用代码模式 np.array(some_list) . 值得注
背景:这个blog据报告,使用 numpy.fromiter() 相对于 numpy.array() 具有速度优势。使用提供的脚本作为基础,我想看看在 map() 和 submit() 中执行时 nu
我是一名优秀的程序员,十分优秀!