我有一个4d numpy数组,它代表一个带有3d实例的数据集。
让我们说阵列的形状是(32, 32, 3, 73257)
。
如何将数组的形状更改为(73257, 32, 32, 3)
?
---问题更新 似乎rollaxis和transpose都可以解决问题。
Thanx回复!
答案 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