gpt4 book ai didi

python - Numpy:给定标量 condlist 的一维数组的 np.select

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:28 26 4
gpt4 key购买 nike

我正在尝试得到这样的东西:

def choozer(my_1D_array):
newArray = np.zeros((len(my_1D_array), 5))
for x in enumerate(my_1D_array):
if x[1]<3:
y = np.array([1,1,1,1,1]) #the y's can be any array of random values
elif 3<=x[1]<=5:
y = np.array([2,2,2,2,2])# don't need to be repeated
elif x[1]>5:
y = np.array([3,3,3,3,3])
newArray[x[0]] = y
return newArray

有效...但对我来说似乎很迂回,效率对我的应用程序很重要。所以我想到将它与 np.select 进行比较:

def np_choozer(my_1D_array):
condlist = [my_1D_array<3,
np.logical_and((3<=my_1D_array),(my_1D_array<=5)),
my_1D_array>5]
choicelist = [np.array([1,1,1,1,1]),
np.array([2,2,2,2,2]),
np.array([3,3,3,3,3])]
return np.select(condlist, choicelist)

...但没有骰子。它返回轴 1 上的选择列表值。是否有更好的方法来解决上述问题的通用版本?

提前致谢。

最佳答案

也许用np.select可以写得更好,但你总是可以这样做:

newArray = np.zeros(my_1D_array.shape + (5,))
newArray[np.where(my_1D_array < 3)] = 1
newArray[np.where((my_1D_array >= 3) & (my_1D_array <= 5)] = 2
newArray[np.where(my_1D_array > 5)] = 3

一个例子:

>>> a = np.random.rand(10) * 10
>>> b = np.empty(a.shape + (5,))
>>> b[np.where(a < 3)] = 1
>>> b[np.where((a >= 3) & (a <= 5))] = 2
>>> b[np.where(a > 5)] = 3
>>> b
array([[ 1., 1., 1., 1., 1.],
[ 3., 3., 3., 3., 3.],
[ 2., 2., 2., 2., 2.],
[ 3., 3., 3., 3., 3.],
[ 1., 1., 1., 1., 1.],
[ 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3.],
[ 3., 3., 3., 3., 3.],
[ 1., 1., 1., 1., 1.],
[ 3., 3., 3., 3., 3.]])
<小时/>

编辑上面的代码利用了分配中的广播,但是 123 可以替换为 5 元素列表或数组。使用与上面示例相同的 ab:

>>> b[np.where(a < 3)] = np.arange(5)
>>> b[np.where((a >= 3) & (a <= 5))] = np.arange(5) + 10
>>> b[np.where(a > 5)] = np.arange(5) + 20
>>> b
array([[ 0., 1., 2., 3., 4.],
[ 20., 21., 22., 23., 24.],
[ 10., 11., 12., 13., 14.],
[ 20., 21., 22., 23., 24.],
[ 0., 1., 2., 3., 4.],
[ 20., 21., 22., 23., 24.],
[ 20., 21., 22., 23., 24.],
[ 20., 21., 22., 23., 24.],
[ 0., 1., 2., 3., 4.],
[ 20., 21., 22., 23., 24.]])

关于python - Numpy:给定标量 condlist 的一维数组的 np.select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15422038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com