例如,我有2个大小分别为m
和n
的数组:
x = np.asarray([100, 200])
y = np.asarray([300, 400, 500])
我还有一个大小为m+n
的整数数组,例如:
indices = np.asarray([1, 1, 0, 1 , 0])
在这种情况下,我想将x
和y
合并为大小为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中有效地做到这一点?
谢谢!
答案 0 :(得分:0)
制作一个输出数组,并使用布尔索引将x
和y
分配到输出的正确插槽中:
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)
和: