>>>
>>> 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.]])
>>>