在索引

时间:2016-07-16 16:21:00

标签: python numpy

如何在索引处分割numpy数组

import numpy as np
a = np.random.random((3,3,3))
#What i want to achieve is 3 x (3x3) matrix 

我想将我的(3,3,3)矩阵转换为(3x3)矩阵列表

我能做到:

b = []
for i in a:
   b.append(i)

但应该有更好的方法

3 个答案:

答案 0 :(得分:3)

要清楚,您要将 3维数组转换为包含三个 2维数组的列表。

您可以直接将数组分配给新名称(其中3个):

import numpy as np

a = np.random.random((3,3,3))
b,c,d = a
my_list = [b, c, d]

您拥有新阵列和结果列表。

如果您不需要数组,那么您可以使用numpy数组的tolist方法:

my_list = a.tolist()

答案 1 :(得分:0)

>>> import numpy as np >>> array = np.ones((3,3,3)) >>> list_of_arrays = list(array) # convert it to a list >>> list_of_arrays [array([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]]), array([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]]), array([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])] 可以使用任何迭代,因此您可以使用它:

axis

然而,(几乎)没有任何理由将numpy数组转换为数组列表。如果您只想访问数组的某些元素,则有slicing and indexing。如果您想要类似于表的数组,可以有structured arraysPandas Dataframe。此外,总是可以使用numpy函数的>>> array = np.ones((3,3,3)) * np.array([1,2,3]).reshape(3,1,1) >>> array.sum(axis=(1,2)) # getting the sum of all the 3x3 matrices array([ 9., 18., 27.]) 参数一次性将它们应用于3x3矩阵:

public long reverseLong(long value){

    int sign = 1;
    long result=0; //to hold result

    if(value < 0){
       value =-value;
       sign = -1;
    }

    while(value !=0){
    /*
    * To give a little perspective about how one can arrive at writing this
    * condition:- Think of long as some type which holds only 2 or 3 bits of
    * data. If it holds only 2 bits, then range of values it can hold will be
    * 0 to 3. Now it's easy to validate or arrive at conditions like the one 
    * in below.
    */  
    if(result > (Long.MAX_VALUE - value%10)/10){ 
       throw new NumberFormatException();
    }
    result = result*10+value%10;   
    value = value/10;
    }

 return sign*result;
}

答案 2 :(得分:-1)

更加pythonic的方式是使用列表理解:

b = [x for x in a]