我有一个带有 n 个值的 numpy 一维数组,我们将其称为 xdata
。
我想创建一个多维 numpy 数组,我们将其命名为 xdataMulti
,这样该数组的每个维度都包含 xdata
中特定范围内的值。
例如,我们可以这么说
xdata = np.array([-0.879645943,-0.7897614865,-0.7051130178,-0.6108652382,-0.5270894341,...])
并且我想将 -0.9
和 -0.6
之间的 xdata 的所有值放入 xdataMulti[:,0]
和所有值中xdataMulti[:,1]
中的 -0.6
和 0
之间,等等
如何创建和填充xdataMulti
(我事先知道我有多少个范围及其端点,但我不知道每个范围中有多少个xdata点,我必须循环遍历xdata
来找出答案)?
最佳答案
如果您的范围数量不太大,您可以手动创建它们
gm09 = xdata >= -0.9
gm06 = xdata >= -0.6
g0 = xdata >= 0
ranges = [xdata[gm09 & ~gm06], xdata[gm06 & ~g0]]
result = [f(r) for r in ranges]
其中 f 是您的 scipy 函数。
如果您的范围数量很大,您可以对数据进行排序,然后使用
搜索排序
。假设您在排序数组 bnd
中具有 block 的边界:
xs = np.sort(xdata)
xbnd = np.searchsorted(xs, bnd)
ranges = [xs[l:r] for l, r in zip(xbnd[:-1], xbnd[1:])]
result = [f(r) for r in ranges]
请注意,这与第一个解决方案不同,因为您的范围将被排序。
如果需要保留原始顺序,可以使用间接排序
order = np.argsort(xdata)
xbnd = np.searchsorted(xdata[order], bnd)
ordord = [np.sort(order[l:r]) for l, r in zip(xbnd[:-1], xbnd[1:])]
ranges = [xdata[oo] for oo in ordord]
result = [f(r) for r in ranges]
关于python - 如何创建多维 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862416/