numpy:根据索引数组组合多个数组

时间:2019-05-02 21:41:10

标签: python arrays numpy

例如,我有2个大小分别为mn的数组:

x = np.asarray([100, 200])
y = np.asarray([300, 400, 500])

我还有一个大小为m+n的整数数组,例如:

indices = np.asarray([1, 1, 0, 1 , 0])

在这种情况下,我想将xy合并为大小为z的数组m+n

expected_z = np.asarray([300, 400, 100, 500, 200])

详细信息:

  • indices的第一值是1,因此z的第一值应来自y。因此,300
  • indices的第二个值是1,所以z的第二个值也应该来自y。因此400
  • indices的第3个值为0,因此这次z的第3个值应来自x。因此100
  • ...

我如何在NumPy中有效地做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:0)

制作一个输出数组,并使用布尔索引将xy分配到输出的正确插槽中:

z = numpy.empty(len(x)+len(y), dtype=x.dtype)
z[indices==0] = x
z[indices==1] = y

答案 1 :(得分:0)

out = indices.copy() out[np.where(indices==0)[0]] = x out[np.where(indices==1)[0]] = y 将是您想要的输出:

out = indices.copy()
out[indices==0] = x
out[indices==1] = y

或如上述答案所示,只需执行以下操作:

class input:

    def __init__(self, username):
        self.username = username
        close = ["X", "x"]
        print("So, let's start, sweetheart, press X when you want to stop. \n")
        user_input = input("")
        user_input = user_input.upper()
        while user_input not in close:
            user_in = Subject(username, user_input)
            user_input = input("")
        print("Good bye, sweetheart!")

答案 2 :(得分:-1)

我希望这可以为您提供帮助:

x          = np.asarray([100, 200])
y          = np.asarray([300, 400, 500])
indices    = np.asarray([1, 1, 0, 1 , 0])
expected_z = np.asarray([])
x_indice   = 0
y_indice   = 0

for i in range(0,len(indices)):
    if indices[i] == 0:
        expected_z = np.insert(expected_z,i,x[x_indice])
        x_indice += 1
    else:
        expected_z = np.insert(expected_z,i,y[y_indice])
        y_indice += 1

expected_z

,输出为:

output : array([300., 400., 100., 500., 200.])

P.S。始终确保len(indices) == len(x) + len(y)和:

  • 来自y == len(y)的值
  • 来自x == len(x)的值