I have two numpy arrays, one with an array of 2 dimensional vectors
(z1_i,z2_i)‘s and the other is just an array of 1 dimensional variables
c_i‘s (the i’s here denote the index of the array). I want to operate on the two arrays to get a single array of one dimensional variable of the form
z1_i*c_i + z2_i*(1-c_i) (again, the subscript i refer to the index of the array). For example:
2D_samples= np.array([[1, 2], [3, 4]]) 1D_samples = np.array([1, 0]) # desired output would be np.array([1, 4]) # Specifically, [1*1+2*(1-1), 3*0+4(1-0)]=[1,4].
Is there a more efficient way of doing this without executing a for loop? Thanks.
Doing it by for loop would give:
output = np.zeros(2D_samples) for i in range(len(2D_samples)): output[i] = 2D_samples[i] * 1D_samples[i] + 2D_samples[i] * (1 - c[i])
IIUC, you can do:
a2D = np.array([[1, 2], [3, 4]]) a1D = np.array([1, 0]) # reshape the 1D array to 2D b = a1D[:,None] # concatenate b and 1-b column-wise, multiply by a2D and sum per row out = (a2D * np.c_[b,1-b]).sum(1)