如何在numpy中创建一个连续数字数组?
How to create a array of consecutive numbers array in numpy?
我希望生成如下数组:
array([[ 1, 2],
[ 2, 3],
[ 3, 4],
[ 4, 5],
[ 5, 6],
[ 6, 7],
[ 7, 8],
[ 8, 9],
[ 9, 10]])
下面是我在 NumPy 中的生成方式:
import numpy as np
a = np.arange(1, 10)
b = np.arange(2, 11)
np.stack((a, b), axis=1)
NumPy 中是否有任何函数可以直接执行此操作?
我不知道有任何内置程序可以进行这种安排,但这里有一些替代解决方案。
使用半步长和np.floor
:
>>> np.floor(np.arange(1.5, 10.5, .5)).reshape(9, 2)
使用np.repeat
:
>>> np.repeat(np.arange(1, 11), 2)[1:-1].reshape(9, 2)
使用np.lib.stride_tricks.as_strided
(我认为最好的方法):
>>> as_strided(np.arange(1, 11), shape=(9, 2), strides=(8, 8))
由于您要实现的 2D->1D 映射是 i + j = k
,因此步幅必须 (1, 1)
以字节为单位 即 (8, 8)
以位为单位。
我能想到的最短答案,使用broadcasting黑魔法:
# Solution 1:
np.r_[:9][:,None]+[1,2]
# Solution 2:
np.r_['c',:9]+[1,2]
或者也使用np.r_
但这次没有广播:
# Solution 3:
np.r_['1,2,0', :10, 1:11]
每个解决方案都按预期生成:
array([[ 1, 2],
[ 2, 3],
[ 3, 4],
[ 4, 5],
[ 5, 6],
[ 6, 7],
[ 7, 8],
[ 8, 9],
[ 9, 10]])
我希望生成如下数组:
array([[ 1, 2],
[ 2, 3],
[ 3, 4],
[ 4, 5],
[ 5, 6],
[ 6, 7],
[ 7, 8],
[ 8, 9],
[ 9, 10]])
下面是我在 NumPy 中的生成方式:
import numpy as np
a = np.arange(1, 10)
b = np.arange(2, 11)
np.stack((a, b), axis=1)
NumPy 中是否有任何函数可以直接执行此操作?
我不知道有任何内置程序可以进行这种安排,但这里有一些替代解决方案。
使用半步长和
np.floor
:>>> np.floor(np.arange(1.5, 10.5, .5)).reshape(9, 2)
使用
np.repeat
:>>> np.repeat(np.arange(1, 11), 2)[1:-1].reshape(9, 2)
使用
np.lib.stride_tricks.as_strided
(我认为最好的方法):>>> as_strided(np.arange(1, 11), shape=(9, 2), strides=(8, 8))
由于您要实现的 2D->1D 映射是
i + j = k
,因此步幅必须(1, 1)
以字节为单位 即(8, 8)
以位为单位。
我能想到的最短答案,使用broadcasting黑魔法:
# Solution 1:
np.r_[:9][:,None]+[1,2]
# Solution 2:
np.r_['c',:9]+[1,2]
或者也使用np.r_
但这次没有广播:
# Solution 3:
np.r_['1,2,0', :10, 1:11]
每个解决方案都按预期生成:
array([[ 1, 2],
[ 2, 3],
[ 3, 4],
[ 4, 5],
[ 5, 6],
[ 6, 7],
[ 7, 8],
[ 8, 9],
[ 9, 10]])