Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在ndim(第四轴)中堆叠阵列并使用numpy应用旋转_Python_Arrays_Numpy_Multidimensional Array_Scipy - Fatal编程技术网

Python 在ndim(第四轴)中堆叠阵列并使用numpy应用旋转

Python 在ndim(第四轴)中堆叠阵列并使用numpy应用旋转,python,arrays,numpy,multidimensional-array,scipy,Python,Arrays,Numpy,Multidimensional Array,Scipy,为了沿第四个轴堆叠3D阵列,并沿该轴应用旋转,我编写了以下代码段。 是否有numpy函数可以执行此操作: * something similar to numpy.dstack but in ndim * numpy.apply(4D Array, axis=3, angles=[0, 60, ...]) 代码中提到的数组的形状是:(114,79,2) 在新版Numpy(1.10.0)中,有一个用于ndimensional堆叠的stack函数。但是,如果这不是一个选项,这里有一个用于堆叠的函数

为了沿第四个轴堆叠3D阵列,并沿该轴应用旋转,我编写了以下代码段。 是否有numpy函数可以执行此操作:

* something similar to numpy.dstack but in ndim
* numpy.apply(4D Array, axis=3, angles=[0, 60, ...])
代码中提到的数组的形状是:(114,79,2)


在新版Numpy(1.10.0)中,有一个用于ndimensional堆叠的
stack
函数。但是,如果这不是一个选项,这里有一个用于堆叠的函数:

import scipy.ndimage.interpolation as interpolation

def create_stack(*arrays):
    return np.asarray(arrays).swapaxes(0, -1)

stack = create_stack(c1, c1, c1, c1)
for n, a in enumerate([0, 60, 120, 180]):
    stack[:, :, :, n] = interpolation.rotate(stack[:, :, :, n], a, reshape=False)

np.array
沿新的第一轴“堆叠”数组;转置可以将新轴移动到末端:

In [1040]: c1=np.ones((2,3,5),int)
In [1041]: c1s=np.array([c1.copy() for i in range(4)])
In [1042]: c1s.shape
Out[1042]: (4, 2, 3, 5)
In [1043]: c1s.transpose([1,2,3,0]).shape
Out[1043]: (2, 3, 5, 4)
如果我首先向每个组件添加一个新轴,我还可以使用
连接

In [1044]: np.concatenate([c1[...,None].copy() for i in range(4)],axis=-1).shape
Out[1044]: (2, 3, 5, 4)
concatenate
变量、
vstack
hstack
dstack
都在
args
列表上使用某种形式的迭代来调整它们的尺寸,为连接做准备

vstack: concatenate([atleast_2d(_m) for _m in tup], 0)
hstack: arrs = [atleast_1d(_m) for _m in tup]
dstack: concatenate([atleast_3d(_m) for _m in tup], 2)
但是为什么首先要进行堆栈/连接呢?只需迭代数组列表:

alist = [c1, c2, c3, ....]  # plain list
for a,n in zip([0,60,120,180],[0,1,2,3]):
    alist[n]=nd.rotate(alist[n],a, reshape=False)
如果要“堆叠”数组,然后对它们进行迭代,那么沿着第一个轴而不是最后一个轴这样做更有意义。这样它就可以在连续的数据块上进行迭代。numpy在任何轴上的迭代都做得很好,但是在第一个轴上的迭代是“自然的”

您可能可以在不使用计数器的情况下进行迭代:

arr = np.array([c1,c2,...]):
for c in arr:
    c[:] = nd.roate(c, a, reshape=False)

(MATLAB将“外”轴放在最后,numpy将其放在第一位)。

什么是旋转?是的,我的意思是scipy.ndimage.rotate(数组,角度),所以没有办法避免循环和使用矢量化代码?
arr = np.array([c1,c2,...]):
for c in arr:
    c[:] = nd.roate(c, a, reshape=False)