您可以使用broadcasting–
(A[:,None] + np.arange(1024)).ravel()
样品运行-
# Input array
In [433]: A = np.array([512,2560,3584,5632])
# Add ranged numbers in a broadcasted way for elementwise addition
In [434]: A[:,None] + np.arange(1024)
Out[434]:
array([[ 512, 513, 514, ..., 1533, 1534, 1535],
[2560, 2561, 2562, ..., 3581, 3582, 3583],
[3584, 3585, 3586, ..., 4605, 4606, 4607],
[5632, 5633, 5634, ..., 6653, 6654, 6655]])
# Finally flatten those for final output
In [435]: (A[:,None] + np.arange(1024)).ravel()
Out[435]: array([ 512, 513, 514, ..., 6653, 6654, 6655])
np.add.outer(A,range(1024)).ravel()
等效的MATLAB版本:
作为参考,使用bsxfun等效广播的MATLAB版本并请牢记列的主要顺序,它们看起来很相似-
>> A = [512,2560,3584,5632];
>> sums = bsxfun(@plus, A, [0:1023].');
>> [sums(1:3,1) ; sums(end-2:end,1)].'
ans =
512 513 514 1533 1534 1535
>> [sums(1:3,2) ; sums(end-2:end,2)].'
ans =
2560 2561 2562 3581 3582 3583
>> [sums(1:3,3) ; sums(end-2:end,3)].'
ans =
3584 3585 3586 4605 4606 4607
>> [sums(1:3,4) ; sums(end-2:end,4)].'
ans =
5632 5633 5634 6653 6654 6655
>> out = reshape(sums,1,[]);
>> [out(1:3) out(end-2:end)]
ans =
512 513 514 6653 6654 6655