NumPy学习

>>> 
>>> from numpy import *
a
>>> a=array([2,3,4])
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int32')
>>> b=array([1.2,3.4,4.5])
>>> b.dtype
dtype('float64')
>>> c=array([(1.2,2.3),(4,5,6)])
>>> c
array([(1.2, 2.3), (4, 5, 6)], dtype=object)

#创建时显式指定数组中元素的类型
>>> set_printoptions(threshold="nan")
>>> c=array([[1,2],[3,4]],dtype=complex)
>>> c
array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]])

#用函数zeros可创建一个全是0的数组,
#用函数ones可创建一个全为1的数组,
#函数empty创建一个内容随机并且依
#赖与内存状态的数组。
#默认创建的数组类型(dtype)都是float64。

#d.dtype.itemsize来查看数组中元素占用的字节数目。
>>> d=zeros((3,4))
>>> d.dtype
dtype('float64')
>>> d
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> d.dtype.itemsize
8
>>> ones((2,3,4),dtype=int16) #手动指定数组中元素类型  
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int16)
>>> empty((2,3))
array([[  2.49208464e-306,  -3.13264791e-294,   6.73606550e-310],
       [  2.49208610e-306,   3.91957011e+202,   4.50881957e-310]])


# NumPy提供一个类似arange的函数返回一个数列形式的数组:
>>> arange(1,2,0.5)
array([ 1. ,  1.5])
>>> arange(1,5,0.5)
array([ 1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5])


#当arange使用浮点数参数时,由于浮点数精度有限,
#通常无法预测获得的元素个数。因此,
#最好使用函数linspace去接收我们想要的元素
#个数来代替用range来指定步长。linespace用法如下

>>> import numpy

>>> numpy.linspace(-1,1,0.5)
array([], dtype=float64)
>>> numpy.linspace(-1,0,5)
array([-1.  , -0.75, -0.5 , -0.25,  0.  ])
>>> float64(42)
42.0
>>> int8(42.00)
42

>>> bool(42)
True
>>> bool(42.00)
True
>>> float(True)
1.0
>>> arange(7,dtype=uint16)
array([0, 1, 2, 3, 4, 5, 6], dtype=uint16)
>>> a=arange(6)
>>> print a
[0 1 2 3 4 5]

>>> b=arange(12).reshape(4,3)
>>> print b
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

>>> c=arange(24).reshape(2,3,4)
>>> print c
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

 # 如果一个数组太长,则NumPy自动省略中间部分而只打印两端的数据:   
>>> print arange(10000)
[   0    1    2 ..., 9997 9998 9999]
>>> print arange(10000).reshape(100,100)
[[   0    1    2 ...,   97   98   99]
 [ 100  101  102 ...,  197  198  199]
 [ 200  201  202 ...,  297  298  299]
 ..., 
 [9700 9701 9702 ..., 9797 9798 9799]
 [9800 9801 9802 ..., 9897 9898 9899]
 [9900 9901 9902 ..., 9997 9998 9999]]

#可通过设置printoptions参数来禁用NumPy的这种行为并强制打印整个数组。
>>> set_printoptions(threshold="nan")

<pre class="python" name="code">
>>> 
>>> #数组的算术运算是按元素逐个运算。数组运算后将创建包含运算结果的新数组。
>>> a=np.array([20,30,40,50])

Traceback (most recent call last):
  File "<pyshell#70>", line 1, in <module>
    a=np.array([20,30,40,50])
NameError: name 'np' is not defined
>>> import numpy
>>> a=np.array([20,30,40,50])

Traceback (most recent call last):
  File "<pyshell#72>", line 1, in <module>
    a=np.array([20,30,40,50])
NameError: name 'np' is not defined
>>> a=numpy.array([20,30,40,50])
>>> a
array([20, 30, 40, 50])
>>> b=numpy.arange(4)
>>> b
array([0, 1, 2, 3])
>>> c=a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*numpy.sin(a)
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
>>> a<35
array([ True,  True, False, False], dtype=bool)
>>> #与其他矩阵语言不同,NumPy中的乘法运算符*按元素逐个计算,矩阵乘法可以使用dot函数或创建矩阵对象实现
>>> A=numpy.array([[1,1],[0,1]])
>>> B=numpy.array([[2,0],[3,4]])
>>> A,B
(array([[1, 1],
       [0, 1]]), array([[2, 0],
       [3, 4]]))
>>> numpy.dot(A,B)
array([[5, 4],
       [3, 4]])
>>> 
>>> a=numpy.ones((2,3),dpype=int)

Traceback (most recent call last):
  File "<pyshell#88>", line 1, in <module>
    a=numpy.ones((2,3),dpype=int)
TypeError: ones() got an unexpected keyword argument 'dpype'
>>> a=numpy.ones((2,3),dtype=int)
>>> b=numpy.random.random((2,3))
>>> a*=3
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> a+=b
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b=
SyntaxError: invalid syntax
>>> b=numpy.random((2,3))

Traceback (most recent call last):
  File "<pyshell#96>", line 1, in <module>
    b=numpy.random((2,3))
TypeError: 'module' object is not callable
>>> from numpy import *
>>> numpy.random.random((2,3))
array([[ 0.53606199,  0.65497688,  0.01584017],
       [ 0.2846157 ,  0.84953214,  0.40640073]])
>>> b=numpy.random.random((2,3))
>>> a+=b
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b
array([[ 0.03131328,  0.27947075,  0.76141203],
       [ 0.71212822,  0.36744371,  0.44184685]])
>>> a+=b
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b+=a
>>> b
array([[ 3.03131328,  3.27947075,  3.76141203],
       [ 3.71212822,  3.36744371,  3.44184685]])
>>> float64(b)
array([[ 3.03131328,  3.27947075,  3.76141203],
       [ 3.71212822,  3.36744371,  3.44184685]])
>>> #当数组中存储的是不同类型的元素时,数组将使用占用更多位(bit)的数据类型作为其本身的数据类型,也就是偏向更精确的数据类型(这种行为叫做upcast)。

>>> a=np.ones(3,dtype=np.int32)

Traceback (most recent call last):
  File "<pyshell#109>", line 1, in <module>
    a=np.ones(3,dtype=np.int32)
NameError: name 'np' is not defined
>>> #alt+p
>>> 
>>> a=numpy.ones(3,dtype=np.int32)

Traceback (most recent call last):
  File "<pyshell#112>", line 1, in <module>
    a=numpy.ones(3,dtype=np.int32)
NameError: name 'np' is not defined
>>> a=numpy.ones(3,dtype=numpy.int32)
>>> b=numpy.linspace(0,numpy.pi,3)
>>> b.dtype.name
'float64'
>>> c=a+b
>>> c
array([ 1.        ,  2.57079633,  4.14159265])
>>> c.dtype.name
'float64'
>>> d=exp(c*1j)
>>> d
array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,
       -0.54030231-0.84147098j])
>>> d.dtype.name
'complex128'
>>> # 许多非数组运算,如计算数组所有元素之和,都作为ndarray类的方法来实现,使用时需要用ndarray类的实例来调用这些方法。
>>> a=numpy.random.random((2,3))
>>> a
array([[ 0.97068209,  0.59197857,  0.50932684],
       [ 0.12830554,  0.7492887 ,  0.45494336]])
>>> a.sum()
3.4045250987218862
>>> a.min
<built-in method min of numpy.ndarray object at 0x02B8DD48>
>>> a.min()
0.12830553655233767
>>> a.max()
0.9706820938929549
>>> 
>>> 
>>> #这些运算将数组看作是一维线性列表。但可通过指定axis参数(即数组的行)对指定的轴做相应的运算:

>>> b=numpy.arange(12).reshape(3,4)
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> b.sum(axis=0)
array([12, 15, 18, 21])
>>> b.min(axis=1)
array([0, 4, 8])
>>> # 计算每一行的累积和
>>> b.cumsum(axis=1)
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])
>>> #默认轴是竖轴用0表示,横轴用一表示
>>> 
>>> #索引,切片和迭代
>>> #和列表和其它Python序列一样,一维数组可以进行索引、切片和迭代操作。

>>> a=numpy.arange(10)**
SyntaxError: invalid syntax
>>> a=numpy.arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]
array([ 8, 27, 64])
\
>>> 
>>> # 等同于a[0:6:2]= -1000,从开始到第6个位置,每隔一个元素将其赋值为-1000
>>> a[:6:2]=-1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])
>>> 
>>> # 反转a
>>> a[: :1]
array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])
>>> a[: :-1]
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])
>>> for i in a:
	print i**(1/3)

	
1
1
1
1
1
1
1
1
1
1
>>> for i in a:
	print i**(1/3.0)

	
nan
1.0
nan
3.0
nan
5.0
6.0
7.0
8.0
9.0
>>> 
>>> 
>>> #多维数组可以每个轴有一个索引。这些索引由一个逗号分割的元组给出。
>>> def f(x,y):
	return 10*x+y

>>> b=numpy.fromfunction(f,(5,4),dtype=int)
>>> b
array([[ 0,  1,  2,  3],
       [10, 11, 12, 13],
       [20, 21, 22, 23],
       [30, 31, 32, 33],
       [40, 41, 42, 43]])
>>> b[2,3]
23
>>> b[0:5,1]
array([ 1, 11, 21, 31, 41])
>>> b[: ,1]
array([ 1, 11, 21, 31, 41])
>>> b[1:3],: ]
SyntaxError: invalid syntax
>>> b[1:3,: ]
array([[10, 11, 12, 13],
       [20, 21, 22, 23]])
>>> 
>>> 
>>> #当少于提供的索引数目少于轴数时,已给出的数值按秩的顺序复制,确失的索引则默认为是整个切片:
>>> $# 最后一行,等同于b[-1,:],-1是第一个轴,而缺失的认为是:,相当于整个切片。
SyntaxError: invalid syntax
>>> b[-1]
array([40, 41, 42, 43])
>>> 
>>> 
>>> #b[i]中括号中的表达式被当作i和一系列:,来代表剩下的轴。NumPy也允许你使用“点”像b[i,...]。

    点(…)代表许多产生一个完整的索引元组必要的分号。如果x是秩为5的数组(即它有5个轴),那么:   
•x[1,2,…] 等同于 x[1,2,:,:,:],  
•x[…,3] 等同于 x[:,:,:,:,3]
•x[4,…,5,:] 等同 x[4,:,:,5,:] 

Unsupported characters in input
'''
'''
'\n'
>>> c=array([[[0,1,2],[10,11,12]],
	 [[100,101,102],[110,111,112]]])
>>> c.shape
(2, 2, 3)
>>> #等同于c[1,:,:]或c[1]
>>> c[1,...]
array([[100, 101, 102],
       [110, 111, 112]])
>>> c[...,2]
array([[  2,  12],
       [102, 112]])
>>> 
>>> 
>>> #多维数组的遍历是以是第一个轴为基础的
>>> for row in b:
	print row

	
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]
>>> 
>>> 如果想对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器
SyntaxError: invalid syntax
>>> #如果想对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器
>>> for element in b.flat:
	print element,

	
0 1 2 3 10 11 12 13 20 21 22 23 30 31 32 33 40 41 42 43
>>> 
>>> 
>>> #数组的形状取决于其每个轴上的元素个数
>>> a=numpy.floor(10*numpy.random.random((3,4)))
>>> a
array([[ 8.,  9.,  1.,  2.],
       [ 3.,  8.,  6.,  0.],
       [ 2.,  4.,  6.,  1.]])
>>> a.shape
(3, 4)
>>> 
>>> #可以用多种方式修改数组的形状:
>>> #平坦化数组
>>> a.ravel()
array([ 8.,  9.,  1.,  2.,  3.,  8.,  6.,  0.,  2.,  4.,  6.,  1.])
>>> a.shape(6,2)

Traceback (most recent call last):
  File "<pyshell#212>", line 1, in <module>
    a.shape(6,2)
TypeError: 'tuple' object is not callable
>>> a.shape=(6,2)
>>> a
array([[ 8.,  9.],
       [ 1.,  2.],
       [ 3.,  8.],
       [ 6.,  0.],
       [ 2.,  4.],
       [ 6.,  1.]])
>>> a.transpose()
array([[ 8.,  1.,  3.,  6.,  2.,  6.],
       [ 9.,  2.,  8.,  0.,  4.,  1.]])
>>> '''
由ravel()展平的数组元素的顺序通常是“C风格”的,就是以行为基准,最右边的索引变化得最快,所以元素a[0,0]之后是a[0,1]。如果数组改变成其它形状(reshape),数组仍然是“C风格”的。NumPy通常创建一个以这个顺序保存数据的数组,所以ravel()通常不需要创建起调用数组的副本。但如果数组是通过切片其它数组或有不同寻常的选项时,就可能需要创建其副本。还可以同过一些可选参数函数让reshape()和ravel()构建FORTRAN风格的数组,即最左边的索引变化最快。
'''
'\n\xd3\xc9ravel()\xd5\xb9\xc6\xbd\xb5\xc4\xca\xfd\xd7\xe9\xd4\xaa\xcb\xd8\xb5\xc4\xcb\xb3\xd0\xf2\xcd\xa8\xb3\xa3\xca\xc7\xa1\xb0C\xb7\xe7\xb8\xf1\xa1\xb1\xb5\xc4\xa3\xac\xbe\xcd\xca\xc7\xd2\xd4\xd0\xd0\xce\xaa\xbb\xf9\xd7\xbc\xa3\xac\xd7\xee\xd3\xd2\xb1\xdf\xb5\xc4\xcb\xf7\xd2\xfd\xb1\xe4\xbb\xaf\xb5\xc3\xd7\xee\xbf\xec\xa3\xac\xcb\xf9\xd2\xd4\xd4\xaa\xcb\xd8a[0,0]\xd6\xae\xba\xf3\xca\xc7a[0,1]\xa1\xa3\xc8\xe7\xb9\xfb\xca\xfd\xd7\xe9\xb8\xc4\xb1\xe4\xb3\xc9\xc6\xe4\xcb\xfc\xd0\xce\xd7\xb4(reshape)\xa3\xac\xca\xfd\xd7\xe9\xc8\xd4\xc8\xbb\xca\xc7\xa1\xb0C\xb7\xe7\xb8\xf1\xa1\xb1\xb5\xc4\xa1\xa3NumPy\xcd\xa8\xb3\xa3\xb4\xb4\xbd\xa8\xd2\xbb\xb8\xf6\xd2\xd4\xd5\xe2\xb8\xf6\xcb\xb3\xd0\xf2\xb1\xa3\xb4\xe6\xca\xfd\xbe\xdd\xb5\xc4\xca\xfd\xd7\xe9\xa3\xac\xcb\xf9\xd2\xd4ravel()\xcd\xa8\xb3\xa3\xb2\xbb\xd0\xe8\xd2\xaa\xb4\xb4\xbd\xa8\xc6\xf0\xb5\xf7\xd3\xc3\xca\xfd\xd7\xe9\xb5\xc4\xb8\xb1\xb1\xbe\xa1\xa3\xb5\xab\xc8\xe7\xb9\xfb\xca\xfd\xd7\xe9\xca\xc7\xcd\xa8\xb9\xfd\xc7\xd0\xc6\xac\xc6\xe4\xcb\xfc\xca\xfd\xd7\xe9\xbb\xf2\xd3\xd0\xb2\xbb\xcd\xac\xd1\xb0\xb3\xa3\xb5\xc4\xd1\xa1\xcf\xee\xca\xb1\xa3\xac\xbe\xcd\xbf\xc9\xc4\xdc\xd0\xe8\xd2\xaa\xb4\xb4\xbd\xa8\xc6\xe4\xb8\xb1\xb1\xbe\xa1\xa3\xbb\xb9\xbf\xc9\xd2\xd4\xcd\xac\xb9\xfd\xd2\xbb\xd0\xa9\xbf\xc9\xd1\xa1\xb2\xce\xca\xfd\xba\xaf\xca\xfd\xc8\xc3reshape()\xba\xcdravel()\xb9\xb9\xbd\xa8FORTRAN\xb7\xe7\xb8\xf1\xb5\xc4\xca\xfd\xd7\xe9\xa3\xac\xbc\xb4\xd7\xee\xd7\xf3\xb1\xdf\xb5\xc4\xcb\xf7\xd2\xfd\xb1\xe4\xbb\xaf\xd7\xee\xbf\xec\xa1\xa3\n'
>>> 
>>> #reshape函数改变调用数组的形状并返回该数组,而resize函数改变调用数组自身。
>>> a
array([[ 8.,  9.],
       [ 1.,  2.],
       [ 3.,  8.],
       [ 6.,  0.],
       [ 2.,  4.],
       [ 6.,  1.]])
>>> a.resize((2,6))
>>> a
array([[ 8.,  9.,  1.,  2.,  3.,  8.],
       [ 6.,  0.,  2.,  4.,  6.,  1.]])
>>> 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值