如何创建多维numpy数组?

2024-09-26 22:49:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有n个值的numpy一维数组,我们称之为xdata。在

我想创建一个多维numpy数组,让它称为xdataMulti,这样这个数组的每个维度都包含xdata中某个范围内的值。在

比如说

xdata = np.array([-0.879645943,-0.7897614865,-0.7051130178,-0.6108652382,-0.5270894341,...])

我想把所有扩展数据的值放在-0.9和{}之间,把-0.6和{}之间的所有值放到{}中,依此类推

如何创建和填充xdataMulti(我事先知道我有多少个范围及其端点,但是我不知道每个范围中有多少个扩展数据点,我必须循环xdata才能找到答案)?在


Tags: 数据答案numpynp数组端点array个值
2条回答

如果范围的数量不是太大,可以手动创建它们

 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函数。在

如果范围数很大,可以对数据进行排序,然后使用 searchsorted。假设排序数组bnd中有块的边界:

^{pr2}$

请注意,这与第一个解决方案的不同之处在于,您的范围将被排序。在

如果需要保留原始顺序,可以使用间接排序

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]

多维数组必须是矩形的,因此如果不是所有的行/列都具有相同的长度,那么您就走运了。在

不过,有办法解决这个问题。一种方法是创建listlist

>>> arr = np.random.random((10))  # using this for values

>>> # each item in ranges corresponds to the lower and upper border.
>>> ranges = [(0, 0.3), (0.3, 0.6), (0.6, 1)]  

>>> [arr[(arr >= lower) & (arr < upper)] for lower, upper in ranges]
[array([ 0.15346374]),
 array([ 0.38144735,  0.45017858,  0.52710788,  0.36339812]),
 array([ 0.79770651,  0.77543868,  0.94824291,  0.87412998,  0.70890894])]

这不是一个多维数组,只是一个数组列表,但根据您的需要,这可能已经足够了。在

相关问题 更多 >

    热门问题