如何在索引处分割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)
但应该有更好的方法
答案 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 arrays或Pandas 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]