数据分析~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则会生成一个新的一维数组。

 

推荐阅读:

NumPy数组的属性和常用创建方法

你可听说熊猫(pandas)也会画图?

数据可视化~matplotlib饼图、柱状图

好冷的Python~默认参数、可变对象和不可变对象

编码: 一个隐藏了30多年的bug,Windows含蓄说过某通不行?

Python混合编程:代码级扩展

 

关注微信公众号"桔子code",不错过更多精彩。

图片

posted @ 2021-01-15 22:29  桔子code  阅读(60)  评论(0编辑  收藏  举报