Chapter4-1 NumPy的ndarray:一种多维数组对象


'''
-------------------------------------------------------------------------------------------------------
Chapter4-1 NumPy的ndarray:一种多维数组对象

索引:
1.ndarray :多维数组,是个快速灵活的大数据集容器
2.np.array()构造矩阵,对应的运算结果是对应位的运算结果,默认的是点运算
    np.zeros[_like]生成全零
    np.ones[_like]生成全1
    np.empty[_like]任意值(经常是一些器官的值,不推荐)
    np.arange(1,3) 生成数组[1,2]
    np.eye(n),n阶单位阵
3.data.shape :矩阵的维数
4.dara.dtype: data中存的数据类型如  int32
5.data.ndim :data的行数==data.shape[0]
6.data.astype() int float 和 全是数字的string都可以互相转换。将创造新数组。
7.数组与标量之间的运算
8.基本的索引和切片 ,切片是原始数据的视图,不是复制品,想要复制,arr[:].copy()
9.切片索引:可在对个维度切片
10.布尔型索引  普通的字符串数组会有警告,但不影响结果。应该是在以后的版本中这种方式不这么用了。
        使用np.array['Tim']不会有警告
        多个布尔条件可用&和|连接
    **与切片索引不同,这里产生的而是复制品,而不是视图
11.花式索引,arr[[1,4,6]],arr[[-3,-5,-6]]
12.数组转置和轴对换 arr.T
        矩阵的内积np.dot(arr.T,arr)
        矩阵的轴轴对换见例子(transpose().swapaxes())

Created on 2016年12月15日
@author: Bigboy
----------------------------------------------------------------------------------------------------------------
'''

实践:

#-*- coding:utf-8 -*-
import numpy as np #python 都是小写的
#一下程序都以导入了numpy模块为前提
#out后是输出内容


#1-2-------------------------------------------------------------------
#用numpy的作用
#创建ndarray

#1.ndarray :多维数组,是个快速灵活的大数据集容器
#2.np.array()构造矩阵,对应的运算结果是对应位的运算结果,默认的是点运算

#eg:
data = np.array([[1.2,2,3],[4,5,6]])#只要有一个是小数,结果存的都是小数
print data*10
print data+data
print data.dtype

'''
out:
[[ 12.  20.  30.]
 [ 40.  50.  60.]]
 
[[  2.4   4.    6. ]
 [  8.   10.   12. ]]
 
float64
'''

#但是普通的数组(不用np.array()生成)


data1 = [[1,2,3],[4,5,6]]
print data1*10
print data1+data1




'''
out:
[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6],
 [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6], 
 [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6], 
 [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6], 
 [1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]#长度变为十倍
 
[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]#两个数组合并

'''

#np.zeros[_like]生成全零
print np.zeros((2,2))#全0

#np.ones[_like]生成全1
print np.ones((2,2))#全1
#np.empty[_like]任意值(经常是一些器官的值,不推荐)
print np.empty((3,5))#
#np.arange(1,3) 生成数组[1,2]
#np.eye(n),n阶单位阵
print np.eye(4)

data2 = np.array(['aaa','bbbb'])#输出类型是较长的那个,这里是S4
print data2.dtype
 
'''
out:
[[ 0.  0.]
 [ 0.  0.]]
 
[[ 1.  1.]
 [ 1.  1.]]
 
[[  2.02243914e-316   1.63227432e-316   2.28183191e-316   2.28184772e-316
    2.28185167e-316]
 [  2.28185562e-316   2.28985553e-316   2.31106083e-316   2.31106478e-316
    2.31113593e-316]
 [  2.31114384e-316   2.31117150e-316   2.31117546e-316   2.31117941e-316
    2.31123474e-316]]#输出很奇怪的值
    
[[ 1.  0.  0.  0.]
 [ 0.  1.  0.  0.]
 [ 0.  0.  1.  0.]
 [ 0.  0.  0.  1.]]#单位阵
 
|S4 #因为"bbbb"的长度是4
'''
 
#3 4 5-------------------------------------------------------------------

#3.data.shape :矩阵的维数
#4.dara.dtype: data中存的数据类型如  int32
#5.data.ndim :data的行数==data.shape[0]

data = np.array([[1,2,3],[4,5,6]])

print data.shape,data.dtype,data.ndim

'''
out:

(2L, 3L) int32 2
#说明data是2*3的矩阵,数据是int32类型,矩阵的第一个维度是2
'''


#7----------------------------------------------------------------------

#7.数组与标量之间的运算
#矩阵的乘法
data = np.array([[1.2,2,3],[4,5,6],[7,8,9]])

print data*data#按位相乘
print data-data#按位相减

'''
out:

[[  1.44   4.     9.  ]
 [ 16.    25.    36.  ]
 [ 49.    64.    81.  ]]
[[ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]
'''



#8-9-----------------------------------------------------------------------

#8.基本的索引和切片 ,切片是原始数据的视图,不是复制品,想要复制,arr[:].copy()
#9.切片索引:可在对个维度切片
#切片:
data = np.array([[1.2,2,3],[4,5,6],[7,8,9]])

print data[:2,1:]
#固定切片的维度
print data[1,1:]

'''
out:
[[ 2.  3.]
 [ 5.  6.]]

[ 5.  6.]
'''

#10------------------------------------------------------------------------

#10.布尔型索引  普通的字符串数组会有警告(error in the future),但不影响结果。应该是在以后的版本中这种方式不这么用了。
#        使用np.array['Tim']不会有警告
#        多个布尔条件可用&和|连接
#     **与切片索引不同,这里产生的是复制品,而不是视图


from numpy.random import randn
data = randn(3,4)
print data
#names1 = ['Bob','Tim','Sam']
names = np.array(['Bob','Tim','Sam'])
print names == 'Bob'
print data[names=='Tim']
print data[names!='Bob']
#print data[names1=='Tim']

'''
out:
[[ 1.92680992  0.97440038  1.45164588 -3.25690099]
 [-0.25832721 -0.39816899  0.8138747  -1.2553389 ]
 [-1.07800617  1.98196283  0.12795384 -1.29150497]]#data的内容

[ True False False]#索引对应位置的bool值

[[-0.25832721 -0.39816899  0.8138747  -1.2553389 ]]#Tim对应的数据

[[-0.25832721 -0.39816899  0.8138747  -1.2553389 ]
 [-1.07800617  1.98196283  0.12795384 -1.29150497]]
'''


#12-----------------------------------------------------------------------

#12.数组转置和轴对换 arr.T
#    矩阵的内积np.dot(arr.T,arr)
#    矩阵的轴轴对换见例子(transpose().swapaxes())
arr = np.arange(16).reshape((2,2,4))
print arr
print arr.transpose((1,0,2))#接受一个轴编号
'''
out:
[[[ 0  1  2  3]
  [ 4  5  6  7]]
 [[ 8  9 10 11]
  [12 13 14 15]]]

[[[ 0  1  2  3]
  [ 8  9 10 11]]
 [[ 4  5  6  7]
  [12 13 14 15]]]


#解释:原来的索引为(2[0],2[1],4[2]),现在为(2[1],2[0],4[2])
#比如4,原来在(0,1,0 )的位置,现在在(1,0,0)的位置,依次类推

print arr.swapaxes(1,2)#接受一对周编号,对换这两个轴上的数据
out:
[[[ 0  4]
  [ 1  5]
  [ 2  6]
  [ 3  7]]
 [[ 8 12]
  [ 9 13]
  [10 14]
  [11 15]]]

#解释:原来的索引为(2[0],2[1],4[2]),现在为(2[0],4[2],2[1])
#原来5在(1,0,1)的位置,现在是(1,1,0)的位置。就是1,2索引对应的坐标互换
'''
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值