使用1D数组制作具有零填充的3D数组,这取决于numpythonically的1D数组的索引

时间:2017-09-26 17:41:54

标签: python arrays numpy

考虑以下1D数组

a=np.arange(3)+9
b=np.arange(3)+5

目前我正在使用

初始化新的3d数组
n=4
cols=3
k=np.vstack((a,b,a*b,np.zeros((n,cols)),a,b,a,a,b**2,np.zeros((n,cols)),a*2,a)).T.reshape(-1,2,n+5)

其中a和b将始终是相同的形状

导致

array([[[  9.,   5.,  45.,   0.,   0.,   0.,   0.,   9.,   5.],
        [  9.,   9.,  25.,   0.,   0.,   0.,   0.,  18.,   9.]],

       [[ 10.,   6.,  60.,   0.,   0.,   0.,   0.,  10.,   6.],
        [ 10.,  10.,  36.,   0.,   0.,   0.,   0.,  20.,  10.]],

       [[ 11.,   7.,  77.,   0.,   0.,   0.,   0.,  11.,   7.],
        [ 11.,  11.,  49.,   0.,   0.,   0.,   0.,  22.,  11.]]])

如何使用类似的技术(也没有for循环)将零填充更改为以下内容:

array([[[  9.,   5.,  45.,   9.,   5.,   0.,   0.,   0.,   0.],
        [  9.,   9.,  25.,  18.,   9.,   0.,   0.,   0.,   0.]],

       [[ 10.,   6.,  60.,   0.,   0.,  10.,   6.,   0.,   0.],
        [ 10.,  10.,  36.,   0.,   0.,  20.,  10.,   0.,   0.]],

       [[ 11.,   7.,  77.,   0.,   0.,   0.,   0.,  11.,   7.],
        [ 11.,  11.,  49.,   0.,   0.,   0.,   0.,  22.,  11.]]])

1 个答案:

答案 0 :(得分:1)

在给定列索引的情况下,可以使用advanced-indexing将这些数组值分配到零初始化数组中 -

<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body ng-app="">

<form name="myForm">

Click here to make the input field required:

<div ng-app="" ng-init="firstName='John'">

<input name="myInput" ng-model="myInput" ng-value="firstName" ng-required="true">

<h1 ng-if="!myForm.myInput.$valid">The input field cannot be empty</h1>

</form>

</body>
</html>

示例运行 -

out = np.zeros((3,2,9),dtype=bool)
vals = np.array([[a,b,a*b,a,b],[a,a,b**2,2*a,a]])
out[np.arange(3)[:,None],:, idx] = vals.T