Python数据分析学习(二):Numpy数组对象基础
1.1数组对象基础
1.初识数组对象¶
In [1]:
import numpy as np
np.__version__
Out[1]:
In [2]:
data = np.array([1,2,3,4,5])
data
Out[2]:
In [3]:
type(data)
Out[3]:
In [4]:
dir(data)
Out[4]:
In [5]:
data?
In [6]:
# 数组元素的类型
data.dtype
Out[6]:
In [7]:
# 修改数组类型
new_data = data.astype(np.float)
new_data
Out[7]:
In [8]:
new_data.dtype
Out[8]:
In [9]:
data,data.dtype
Out[9]:
In [10]:
# 数组的外貌
a = np.array([1,2,3])
b = np.array([1.0,2.0,3.0])
a.dtype,b.dtype
Out[10]:
In [11]:
a.shape
Out[11]:
In [12]:
b.shape
Out[12]:
In [13]:
c = np.array([1.0,2.0,3.0,4.0])
c.shape
Out[13]:
In [14]:
# 维度
a.ndim
Out[14]:
In [15]:
# 返回元素个数
a.size
Out[15]:
In [16]:
c.size
Out[16]:
常用属性¶
- dtype:返回数组元素的类型
- shape:返回一个元组,元组中的每个整数依次对应数组的每个轴的元素个数
- size:返回数组中元素个数
- ndim:返回数组维度
- nbytes:返回保存数据的字节数
2.创建数组¶
In [17]:
np.array?
In [18]:
a = np.array([1,2,3,4])
b = np.array([1,2,3,4],dtype=float)
a
Out[18]:
In [19]:
a.dtype
Out[19]:
In [20]:
a.shape
Out[20]:
In [21]:
a.size
Out[21]:
In [22]:
a.ndim
Out[22]:
In [23]:
b
Out[23]:
In [24]:
b.dtype
Out[24]:
In [25]:
# 多维数组,数组的元素类型必须一致
da = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
da
Out[25]:
In [26]:
np.array([[1,2,3],[4,5,6,7],[8,9]])
Out[26]:
In [27]:
da.shape
Out[27]:
In [28]:
da.size
Out[28]:
In [29]:
db = np.array([[1,2,3,4,5,6,7]],ndmin=2)
db
Out[29]:
In [30]:
db.shape
Out[30]:
In [31]:
db.ndim
Out[31]:
In [32]:
dc = np.array([1,2,3,4,5,6,7])
dc
Out[32]:
In [33]:
dc.shape
Out[33]:
In [34]:
dc.ndim
Out[34]:
In [35]:
a
Out[35]:
In [36]:
de = np.array(a,dtype=complex)
de
Out[36]:
In [37]:
de.dtype
Out[37]:
In [38]:
# 用函数创建数组
np.zeros((2,10))
Out[38]:
In [39]:
np.zeros?
In [40]:
# zeros(shape, dtype=float, order='C')
同一种元素的数组
In [41]:
np.ones((6,))
Out[41]:
In [42]:
# 一维数组才能这样写
np.ones(6)
Out[42]:
In [43]:
da
Out[43]:
In [44]:
da.shape
Out[44]:
In [45]:
np.ones(da.shape)
Out[45]:
In [46]:
np.ones_like(da)
Out[46]:
In [47]:
np.ones_like(da,dtype=np.float)
Out[47]:
In [48]:
df = 6.4 * np.ones_like(da)
df
Out[48]:
对角线独特的数组
- np.eye(),np.identity(),np.diag()都能创建对角线元素比较特殊而其他部分的元素为0的数组
In [49]:
np.eye(4,dtype=int)
Out[49]:
In [50]:
np.eye(4,dtype=int,k=1)
Out[50]:
In [51]:
np.eye(4,dtype=int,k=-1)
Out[51]:
In [52]:
np.identity(4)
Out[52]:
In [53]:
np.diag([1,2,3,4])
Out[53]:
In [54]:
np.diag([1,2,3,4],k=1)
Out[54]:
In [55]:
de = np.arange(16).reshape((4,4))
de
Out[55]:
In [56]:
np.diag(de)
Out[56]:
In [57]:
np.diag(de,k=-1)
Out[57]:
元素是等差和等比的数组
In [58]:
# arange([start,] stop[, step,], dtype=None)
np.arange(1,100,3)
Out[58]:
In [59]:
np.arange?
In [60]:
# np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
np.linspace(1,10,4)
Out[60]:
In [61]:
np.linspace?
In [62]:
np.logspace?
In [63]:
# np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
np.logspace(2,3,num=4)
Out[63]:
In [64]:
import math
math.log10(215.443469)
Out[64]:
In [65]:
math.log10(464.15888336)
Out[65]:
创建自定义类型的数组
In [66]:
my_type = np.dtype({"names":['book','version'],"formats":['S40',np.int]})
my_type
Out[66]:
In [67]:
my_books = np.array([("python",2),("java",1)],dtype=my_type)
my_books
Out[67]:
In [68]:
# 同my_type
my_type2 = np.dtype([('book','S40'),('version','<i8')])
In [69]:
my_books['book']
Out[69]:
In [70]:
my_books['book'][0]
Out[70]:
In [71]:
my_books[0]
Out[71]:
In [72]:
my_books[0]['book']
Out[72]:
In [73]:
# 修改记录
my_books[0]['book'] = "learn python"
my_books
Out[73]:
- 数组一旦确定,其轴的数量就不能变化
用from系列函数创建数组
In [74]:
#s = 'hello world'
np.frombuffer(b'hello world',dtype='S1',count=5,offset=6)
Out[74]:
In [75]:
np.frombuffer?
In [76]:
def foo(x):
return x + 1
np.fromfunction(foo,(5,),dtype=np.int)
Out[76]:
In [77]:
np.fromfunction(lambda i,j:(i+1)*(j+1),(9,9),dtype=np.int)
Out[77]: