数据分析~numpy数组变形记
原文链接:http://www.juzicode.com/archives/2923
numpy数组的变形可以实现对原始数组的维度改变、轴长度改变,假设原始数据的形状为(n1,n2….nx),变化后的形状为(m1,m2,…my),则要求 n1*n2….*nx = m1*m2…*my。
1、a.resize(m,n)
b=a.resize(m,n):会改变数组a本身,返回b是None。
#juzicode.com,VX:桔子code
import numpy as np
a = np.arange(1,7)
print('a=',a)
b=a.resize(2,3)
print('b=',b)
print('a=',a)
=====运行结果:
a= [1 2 3 4 5 6]
b= None
a= [[1 2 3]
[4 5 6]]
2、a.reshape(m,n)
b=a.reshape(m,n):不会改变a,会返回一个变化后的数组b,b是a的一个视图,修改b会影响a。
#juzicode.com,VX:桔子code
import numpy as np
a = np.arange(1,7)
print('a=',a)
b=a.reshape(2,3)
print('b=',b)
print('a=',a)
b[0][0] = 99 #b是a的视图
print('b=',b)
print('a=',a)
=====运行结果:
a= [1 2 3 4 5 6]
b= [[1 2 3]
[4 5 6]]
a= [1 2 3 4 5 6]
b= [[99 2 3]
[ 4 5 6]]
a= [99 2 3 4 5 6]
3、a.shape=(m,n)
a.shape=(m,n):功能和a.resize()一样,形状参数不限于2维。
#juzicode.com,VX:桔子code
import numpy as np
a = np.arange(1,7)
print('a=',a)
a.shape = (2,3)
print('a=',a)
=====运行结果:
a= [1 2 3 4 5 6]
a= [[1 2 3]
[4 5 6]]
4、a.ravel()
b=a.ravel(): 返回一个一维数组b,返回数组的视图,如果修改b,会导致a发生变化。
#juzicode.com,VX:桔子code
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print('a=',a)
b = a.ravel()
print('b=',b)
print('a=',a)
b [0] = 99 #b是a的视图,修改b的元素会同时改变a
print('b=',b)
print('a=',a)
=====运行结果:
a= [[1 2 3]
[4 5 6]]
b= [1 2 3 4 5 6]
a= [[1 2 3]
[4 5 6]]
b= [99 2 3 4 5 6] #b是a的视图,修改b的元素会同时改变a
a= [[99 2 3]
[ 4 5 6]]
5、a.flatten()
b=a.flatten():返回一个一维数组b,b是一个新的数组,修改b不会影响a。
#juzicode.com,VX:桔子code
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print('a=',a)
b = a.flatten()
print('b=',b)
print('a=',a)
b [0] = 99
print('b=',b)
print('a=',a)
=====运行结果:
a= [[1 2 3]
[4 5 6]]
b= [1 2 3 4 5 6]
a= [[1 2 3]
[4 5 6]]
b= [99 2 3 4 5 6]
a= [[1 2 3]
[4 5 6]]
6、a.transpose()
b=a.transpose():返回一个转置数组b,a不会发生变化,返回的是a的一个视图,修改b的元素会改变a。对于二维数组,行变成列,列变成行。
#juzicode.com,VX:桔子code
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print('a=',a)
b = a.transpose()
print('b=',b)
print('a=',a)
b [0][0] = 99
print('b=',b)
print('a=',a)
=====运行结果:
a= [[1 2 3]
[4 5 6]]
b= [[1 4]
[2 5]
[3 6]]
a= [[1 2 3]
[4 5 6]]
b= [[99 4]
[ 2 5]
[ 3 6]]
a= [[99 2 3]
[ 4 5 6]]
7、a.T
b=a.T:功能同a.transpose(),返回一个转置数组b,a不会发生变化,返回的是a的一个视图,修改b的元素会改变a。对于二位数组,行变成列,列变成行。
#juzicode.com,VX:桔子code
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print('a=',a)
b = a.T
print('b=',b)
print('a=',a)
b [0][0] = 99
print('b=',b)
print('a=',a)
=====运行结果:
a= [[1 2 3]
[4 5 6]]
b= [[1 4]
[2 5]
[3 6]]
a= [[1 2 3]
[4 5 6]]
b= [[99 4]
[ 2 5]
[ 3 6]]
a= [[99 2 3]
[ 4 5 6]]
小结:数组的变形方法有些只是生成原始数组的新视图,并没有真正改变数组的形状,比如reshape、ravel、transpose等,而resize方法、修改数组shape属性则会修改数组本身的形状,flatten则会生成一个新的一维数组。
推荐阅读:
编码: 一个隐藏了30多年的bug,Windows含蓄说过某通不行?
关注微信公众号"桔子code",不错过更多精彩。