'''
-------------------------------------------------------------------------------------------------------
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索引对应的坐标互换
'''