从一个数组追加值,如果另一个数组中的值大于某个值,否则追加该值

问题描述 投票:0回答:3

例如,我有两个长度相等的数组。

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])
python arrays append comparison
3个回答
2
投票
In []: np.where(x < -5, -5, y) Out[]: array([-5, -1, -5, 6, 7, 4])

1
投票

您想基于xy创建一个新数组,该数组的长度与xy相同,但是对于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
  • [作为后续,OP询问如何找到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],并且结果总是更大-您的问题很奇怪))


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.