例如,我有两个长度相等的数组。
x = np.array([-34, 1, -12, 4, 5, -5])
y = np.array([2, -1, 4, 6, 7, 4])
我想创建一个新的数组或相等长度的列表,如果x的值小于某个数字(g),那么它将附加(g),否则将附加y。
因此,在上述两个数组中,如果x小于-5,它将附加-5,否则将附加y的值。结果如下:
new_array = ([-5, -1, -5, 6, 7, 4])
In []:
np.where(x < -5, -5, y)
Out[]:
array([-5, -1, -5, 6, 7, 4])
您想基于x
和y
创建一个新数组,该数组的长度与x
和y
相同,但是对于x
的每个元素,如果小于某个数字[ C0],则为g
,否则为来自g
的相同索引处的匹配值。
y
注意:
import numpy as np x = np.array([-34, 1, -12, 4, 5, -5]) y = np.array([2, -1, 4, 6, 7, 4]) g = -5 result = [g if ax < g else ay for ax, ay in zip(x, y)]
接受两个可迭代,并将它们组合为一个可迭代,将来自每个输入的值配对。因此,它需要zip()
和x
并将它们变成[(-34,2),(1,-1)等]
y
中的ax
小于x
,则结果包括g
,否则它从g
中获得匹配的ay
y
,以便使g
的总和最大化(对于result
的负值)。一种简单的蛮力方法:g
请注意,对于给定的示例数据,答案是无趣的import numpy as np
x = np.array([-34, 1, -12, 4, 5, -5])
y = np.array([2, -1, 4, 6, 7, 4])
prev_s = None
best_g = None
best_result = None
for g in range(min(x), 0):
values = [g if ax < g else ay for ax, ay in zip(x, y)]
s = sum(values)
if best_result is None or s > prev_s:
prev_s = s
best_g = g
best_result = values
print(best_g, best_result)
。 (无趣,因为您可以不断增加6, [6, 6, 6, 6, 6, 6]
,并且结果总是更大-您的问题很奇怪))