Python 在一个numpy数组中以1024为一组填写数字
我有一个大的numpy数组,其元素如下所示Python 在一个numpy数组中以1024为一组填写数字,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我有一个大的numpy数组,其元素如下所示 A = [512,2560,3584,5632,....] A2 = [512,513,514,...,1535,2560,2561,2562,...3583,....] 元素的间距始终至少为1024 假设我需要将上面的数组转换为下面的数组,其中对于原始矩阵A的每个元素,我取一个从A[n]到A[n]+1024(一步一步)的值范围,这些值成为新矩阵的值,如下所示 A = [512,2560,3584,5632,....] A2 = [512,513
A = [512,2560,3584,5632,....]
A2 = [512,513,514,...,1535,2560,2561,2562,...3583,....]
元素的间距始终至少为1024
假设我需要将上面的数组转换为下面的数组,其中对于原始矩阵A的每个元素,我取一个从A[n]
到A[n]+1024
(一步一步)的值范围,这些值成为新矩阵的值,如下所示
A = [512,2560,3584,5632,....]
A2 = [512,513,514,...,1535,2560,2561,2562,...3583,....]
我设置问题的方法是循环原始矩阵A,生成介于A[0]
和A[0]+1024
之间的一系列值(例如),将它们分配到一个新数组,等等。代码如下。约定将A作为原始种子矩阵
seed = 0
A2 = np.empty(len(A)*1024,)
for ind in range(len(A)):
A2[seed:seed+1024] = np.arange(A[ind],A[ind]+1024)
seed = seed+1024;
我得到了我需要的答案,但我想知道这是否是最好的方法。我是一名matlab用户,正在使用python和numpy
,我还不习惯优化numpy
。谢谢你的帮助 您可以使用-
样本运行-
# 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])
交替地-
等效MATLAB版本: 作为参考,MATLAB版本利用与
bsxfun
等效的broadcasting
,并记住列的主要顺序,将沿着以下几行进行查看-
>> 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
您可以使用:
(A.reshape(-1,1) + numpy.arange(1024)).reshape(-1)
这项工作如下:
整形(-1,1)
获得n×1阵列李>
非常感谢。这太好了。@ TurngsMault如果这对你有用的话,考虑接受它。更多信息-