如何基于生成器创建一个数组?

问题描述 投票:0回答:1

假如我有一个大数组。

A = 2*np.ones([100, 100, 100])

我想对它进行一些计算,比如说。

def squared_elements(M):
    yield M**2

我选择使用生成器函数 因为我的数组非常大 而且我不需要所有的计算结果 事实上,我只需要,比如说,在矩阵的中心有一个长度为10的立方体。

如果它是一个普通函数,我可以直接写。

result = squared_elements(A)[45:55, 45:55, 45:55]

然而,生成器是不可下标的,所以最后这个表达式是行不通的。

我如何才能得到同样的 result 使用我的生成函数?

python function numpy generator large-data
1个回答
1
投票

解决办法

result = next(squared_elements(A))
result[45:55, 45:55, 45:55]

最新问题的解决方法

您可以在平方化之前对子集进行切分。

def squared_elements(A, slice_):
    return A[slice_] ** 2

result = squared_elements(A, [slice(45, 55), slice(45, 55), slice(45, 55)])

笔记

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.