Numpy np.where 多重条件
Numpy np.where multiple condition
我需要使用 numpy 处理多个条件。
我正在尝试这段似乎有效的代码。
我的问题是:是否有另一种替代方案可以完成同样的工作?
Mur=np.array([200,246,372])*pq.kN*pq.m
Mumax=np.array([1400,600,700])*pq.kN*pq.m
Mu=np.array([100,500,2000])*pq.kN*pq.m
Acreq=np.where(Mu<Mur,0,"zero")
Acreq=np.where(((Mur<Mu)&(Mu<Mumax)),45,Acreq)
Acreq=np.where(Mu>Mumax,60,Acreq)
Print(Acreq)
['0' '45' '60']
你可以使用Pandas的pd.cut()方法:
生成随机整数序列:
In [162]: import pandas as pd
In [163]: s = pd.Series(np.random.randint(-3,10, 10))
In [164]: s
Out[164]:
0 6
1 -3
2 6
3 6
4 7
5 7
6 3
7 -2
8 9
9 1
dtype: int32
对其进行分类:
In [165]: pd.cut(s, bins=[-np.inf, 2, 5, np.inf], labels=['0', '45', '60'])
Out[165]:
0 60
1 0
2 60
3 60
4 60
5 60
6 45
7 0
8 60
9 0
dtype: category
Categories (3, object): [0 < 45 < 60]
从这里开始:
Mur = np.array([200,246,372])*3*5
Mumax = np.array([1400,600,700])*3*5
Mu = np.array([100,500,2000])*3*5
Acreq = np.where(Mu<Mur,0,"zero")
Acreq = np.where((Mur<Mu)&(Mu<Mumax),45,Acreq)
Acreq = np.where(Mu>Mumax,60,Acreq)
print(Acreq)
['0' '45' '60']
试试这个:
conditions = [Mu<Mur, (Mur<Mu)&(Mu<Mumax), Mu>Mumax ]
choices = [ 0, 45, 60 ]
Acreq = np.select(conditions, choices, default='zero')
print(Acreq)
['0' '45' '60']
这也有效:
np.where((Mur<Mu)&(Mu<Mumax),45,np.where(Mu>Mumax,60,np.where(Mu<Mur,0,"zero")))
我需要使用 numpy 处理多个条件。
我正在尝试这段似乎有效的代码。
我的问题是:是否有另一种替代方案可以完成同样的工作?
Mur=np.array([200,246,372])*pq.kN*pq.m
Mumax=np.array([1400,600,700])*pq.kN*pq.m
Mu=np.array([100,500,2000])*pq.kN*pq.m
Acreq=np.where(Mu<Mur,0,"zero")
Acreq=np.where(((Mur<Mu)&(Mu<Mumax)),45,Acreq)
Acreq=np.where(Mu>Mumax,60,Acreq)
Print(Acreq)
['0' '45' '60']
你可以使用Pandas的pd.cut()方法:
生成随机整数序列:
In [162]: import pandas as pd
In [163]: s = pd.Series(np.random.randint(-3,10, 10))
In [164]: s
Out[164]:
0 6
1 -3
2 6
3 6
4 7
5 7
6 3
7 -2
8 9
9 1
dtype: int32
对其进行分类:
In [165]: pd.cut(s, bins=[-np.inf, 2, 5, np.inf], labels=['0', '45', '60'])
Out[165]:
0 60
1 0
2 60
3 60
4 60
5 60
6 45
7 0
8 60
9 0
dtype: category
Categories (3, object): [0 < 45 < 60]
从这里开始:
Mur = np.array([200,246,372])*3*5
Mumax = np.array([1400,600,700])*3*5
Mu = np.array([100,500,2000])*3*5
Acreq = np.where(Mu<Mur,0,"zero")
Acreq = np.where((Mur<Mu)&(Mu<Mumax),45,Acreq)
Acreq = np.where(Mu>Mumax,60,Acreq)
print(Acreq)
['0' '45' '60']
试试这个:
conditions = [Mu<Mur, (Mur<Mu)&(Mu<Mumax), Mu>Mumax ]
choices = [ 0, 45, 60 ]
Acreq = np.select(conditions, choices, default='zero')
print(Acreq)
['0' '45' '60']
这也有效:
np.where((Mur<Mu)&(Mu<Mumax),45,np.where(Mu>Mumax,60,np.where(Mu<Mur,0,"zero")))