【发布时间】:2021-04-27 08:50:53
【问题描述】:
我有一个索引 IDX(可能是索引列表、布尔掩码、切片元组等)索引一些已知形状的抽象 numpy 数组 shape(可能很大)。
我知道我可以创建一个虚拟数组,对其进行索引并计算元素:
A = np.zeros(shape)
print(A[IDX].size)
有没有什么明智的方法可以在不创建任何(可能很大的)数组的情况下获得索引元素的数量?
我需要将 3D 空间中某些点的函数列表制成表格。这些点是给定为X、Y、Z 列表的矩形网格的子集,IDX 正在索引它们的笛卡尔积:
XX, YY, ZZ = [A[IDX] for A in np.meshgrid(X, Y, Z)]
函数接受X、Y、Z 参数(以及需要索引的笛卡尔积的返回值)或XX、YY、ZZ。
目前我创建了XX、YY 和ZZ 数组,无论它们是否被使用,然后我为函数值分配一个数组:
self.TAB = np.full((len(functions), XX.size),
np.nan)
但我只想在必要时创建XX、YY 和ZZ。我还想将TAB 分配与填充其行分开,因此我需要提前知道列数。
【问题讨论】:
-
我想不出任何接近索引一般性的东西。有太多的选择。为什么需要这个?
-
可能你呈现它的方式是最好的;否则你必须找到每种类型索引的大小
-
@hpaulj 请看编辑
-
如果你想要的只是
XX.size,你可能可以使用XX = np.meshgrid(X, Y, Z)[0][IDX],而不是你现在正在做的XX, YY, ZZ = [A[IDX] for A in np.meshgrid(X, Y, Z)]。据我所知,XX.size、YY.size和ZZ.size的值都是一样的。 -
@hpaulj。如果我错过了任何重要的事情,请告诉我。我确信我的回答不会涵盖所有极端情况,但希望它涵盖了大部分基础知识。
标签: python arrays numpy numpy-ndarray numpy-indexing