有没有办法创建一个数组,其值由另一个数组的值决定?
Is there a way to create an array which values are conditioned by the values of another array?
我有一个名为 E 的值数组,表示能量值
E = np.arange(0.1, 101, 0.1)
我想创建一组名为 a0、a1、a2、a3 的数组,这些系数根据能量值而变化,所以我想做类似的事情:
for item in E:
if item <= 1.28:
a3, a2, a1, a0 = 0, -8.6616, 13.879, -12.104
elif 1.28<item<10:
a3, a2, a1, a0 = -0.186, 0.428, 2.831, -8.76
elif item >=10:
a3, a2, a1, a0 = 0, -0.0365, 1.206, -4.76
此代码没有return任何错误,但我不知道如何创建与 E(能量数组)长度相同的列表或数组,每个数组包含系数 fo 的值具体的能量值,所以我真的很感谢你的帮助!
此致!
如果您希望快速执行此操作,可以按如下方式使用布尔数组:
bool_array_1 = (E <= 1.28)
bool_array_2 = (E > 1.28) & (E < 10)
bool_array_3 = (E >= 10)
a3 = -0.186 * bool_array_2
a2 = -8.6616 * bool_array_1 + 0.428 * bool_array_2 + (-0.0365) * bool_array_3
a1 = 13.879 * bool_array_1 + 2.831 * bool_array_2 + 1.206 * bool_array_3
a0 = -12.104 * bool_array_1 + (-8.76) * bool_array_2 + (-4.76) * bool_array_3
例如,如果 a = 1.5
和 b = np.array([False, True, False, True])
,则 a * b
会产生 array([0, 1.5, 0, 1.5])
import numpy as np
constants = [[ 0, -8.6616, 13.879, -12.104 ],
[ 0.186, 0.428, 2.831, -8.76 ],
[ 0, -0.0365, 1.206, -4.76 ]]
constants = np.array(constants)
E = np.arange(0.1, 101, 0.1)
bins = np.digitize(E, [1.28, 10])
a0 = np.choose(bins, constants[:, 3])
a1 = np.choose(bins, constants[:, 2])
a2 = np.choose(bins, constants[:, 1])
a3 = np.choose(bins, constants[:, 0])
我有一个名为 E 的值数组,表示能量值
E = np.arange(0.1, 101, 0.1)
我想创建一组名为 a0、a1、a2、a3 的数组,这些系数根据能量值而变化,所以我想做类似的事情:
for item in E:
if item <= 1.28:
a3, a2, a1, a0 = 0, -8.6616, 13.879, -12.104
elif 1.28<item<10:
a3, a2, a1, a0 = -0.186, 0.428, 2.831, -8.76
elif item >=10:
a3, a2, a1, a0 = 0, -0.0365, 1.206, -4.76
此代码没有return任何错误,但我不知道如何创建与 E(能量数组)长度相同的列表或数组,每个数组包含系数 fo 的值具体的能量值,所以我真的很感谢你的帮助!
此致!
如果您希望快速执行此操作,可以按如下方式使用布尔数组:
bool_array_1 = (E <= 1.28)
bool_array_2 = (E > 1.28) & (E < 10)
bool_array_3 = (E >= 10)
a3 = -0.186 * bool_array_2
a2 = -8.6616 * bool_array_1 + 0.428 * bool_array_2 + (-0.0365) * bool_array_3
a1 = 13.879 * bool_array_1 + 2.831 * bool_array_2 + 1.206 * bool_array_3
a0 = -12.104 * bool_array_1 + (-8.76) * bool_array_2 + (-4.76) * bool_array_3
例如,如果 a = 1.5
和 b = np.array([False, True, False, True])
,则 a * b
会产生 array([0, 1.5, 0, 1.5])
import numpy as np
constants = [[ 0, -8.6616, 13.879, -12.104 ],
[ 0.186, 0.428, 2.831, -8.76 ],
[ 0, -0.0365, 1.206, -4.76 ]]
constants = np.array(constants)
E = np.arange(0.1, 101, 0.1)
bins = np.digitize(E, [1.28, 10])
a0 = np.choose(bins, constants[:, 3])
a1 = np.choose(bins, constants[:, 2])
a2 = np.choose(bins, constants[:, 1])
a3 = np.choose(bins, constants[:, 0])