numpy 将ndarray转换为2D ndarray

4si2a6ki  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(91)

给定一个ndarray:

import numpy as np
import random

idxs = np.arange(10)
np.random.shuffle(idxs)

字符串
我得到一个输出:

array([1, 2, 7, 8, 5, 9, 3, 4, 6, 0])


我想把它转换成一个ndarrays数组,看起来像这样:

array([[1, 2, 3, 4, 5],
       [2, 3, 4, 5, 6],
       [7, 8, 9, 10, 11],
       [8, 9, 10, 11, 12],
       ...])


对于第一个数组的每个元素,我希望索引最多在它上面5。我该怎么办?我试过用

np.reshape(idxs, (idxs.size, 1))


把它变成这样:

array([[1],
       [2],
       [7],
       [8],
       ...])


但我想让所有的指数达到5以上,如上所述。
我希望我解释清楚了,感谢任何帮助。

hof1towb

hof1towb1#

使用broadcasting

idxs = np.array([1, 2, 7, 8, 5, 9, 3, 4, 6, 0])

out = idxs[:,None] + np.arange(5)

# or
out = idxs.reshape((-1, 1))+np.arange(5)

字符串
或者(主要是为了好玩,因为这不是那么有效),如果你的索引是0-n:

from numpy.lib.stride_tricks import sliding_window_view as swv

out = swv(np.arange(10+5), 5)[idxs]


(If不,这将不必要地生成许多中间行)
输出量:

array([[ 1,  2,  3,  4,  5],
       [ 2,  3,  4,  5,  6],
       [ 7,  8,  9, 10, 11],
       [ 8,  9, 10, 11, 12],
       [ 5,  6,  7,  8,  9],
       [ 9, 10, 11, 12, 13],
       [ 3,  4,  5,  6,  7],
       [ 4,  5,  6,  7,  8],
       [ 6,  7,  8,  9, 10],
       [ 0,  1,  2,  3,  4]])

bxgwgixi

bxgwgixi2#

我有一个简单的方法,通过使用np. newaxis从代码中获得一个(n,1)形状的nd-array。

In [3]: np.arange(10)[:, np.newaxis]
Out[3]:
array([[0],
       [1],
       [2],
       [3],
       [4],
       [5],
       [6],
       [7],
       [8],
       [9]])

字符串

相关问题