重新排列4d numpy阵列

时间:2016-12-08 11:58:42

标签: python arrays numpy

我有一个4d numpy数组,它代表一个带有3d实例的数据集。 让我们说阵列的形状是(32, 32, 3, 73257)

如何将数组的形状更改为(73257, 32, 32, 3)

---问题更新 似乎rollaxis和transpose都可以解决问题。

Thanx回复!

2 个答案:

答案 0 :(得分:4)

package company.viral.organizadorjec.FragmentMenu; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; import company.viral.organizadorjec.R; import company.viral.organizadorjec.ActivitysPrincipales.SQLite; public class ProfesoresF extends Fragment { private Cursor buscador; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_profesores, container, false); SQLite admin = new SQLite(getContext(),"administracion",null,1); SQLiteDatabase bd = admin.getWritableDatabase(); buscador=bd.rawQuery("select nombreprofesor from profesores ",null); String [] listamateria = new String[buscador.getCount()]; int i=0; while (buscador.moveToNext()){ String contenedor = buscador.getString(buscador.getColumnIndex("nombreprofesor")); listamateria[i]=contenedor; i++; } //adaptadores //adaptador dias ListView listaprofe = (ListView) view.findViewById(R.id.listprofef); ArrayAdapter<String> listavistaprofes = new ArrayAdapter<String>( getActivity(), android.R.layout.simple_list_item_1,listamateria); listaprofe.setAdapter(listavistaprofes); return view ; } } 函数完全符合您的要求,您可以传递一个轴参数来控制您想要交换的轴:

np.transpose

b的轴是a的变换版本:b的轴0是a的第3轴,b的轴1是a的第0轴......

这样,你可以在第二个或第三个位置指定你想要的32号轴:

a = np.empty((32, 32, 3, 73257))
b = np.transpose(a, (3, 0, 1, 2))

还提供所需形状的数组,但与前一个不同。

答案 1 :(得分:0)

看起来np.rollaxis(arr, axis=-1)会做你想做的事。例如:

>>> arr = np.empty(32, 32, 3, 73257)
>>> arr2 = np.rollaxis(arr, axis=-1)
>>> arr2.shape
(73257, 32, 32, 3)

这将使所有arr[i,j,k,l] == arr2[l,i,j,k]

成为ijkl