首先是numpy中数组–ndarray类,需要注意的是数组与列表最大的一个不同点是:数组的数据类型基本上都是一个,而列表每个元素的数据类型都可以不同。
ndarray的属性:
ndarray是一个多维数组对象,包括了两部分:实际存储的数据和数组的属性,数组的属性包括了:数组的秩、数组的尺度、数组元素的个数、数组元素类型、每个元素的大小。
属性的名称 | 作用/意义 |
---|---|
a.ndim | 数据的维数 |
a.shape | 数组的形状(比如矩阵几行几列) |
a.size | 元素的个数 |
a.dtype | 元素的种类 |
a.itemsize | 元素的大小(字节) |
下列出ndarray中允许的数据类型(numpy自带)
ndarray的创建:
1、通过已有的列表、元组来创建:
Ex:
mlist=[1,1,1,1]
a=np.array(mlist)
print('a',a)
mtuple=[2,2,2,2]
b=np.array(mtuple)
print('b',b)
结果:
a [1 1 1 1]
b [2 2 2 2]
这里a和b都是numpy.ndarray类。
此外array函数可以改变元素的数据类型:array(list/tuple,dtype=…)
2、一些常用创建函数(与matlab类似)
Ex:
import numpy as np
a=np.arange(10)
print('a',a)
b=np.ones((3,2))
print('b',b) # zeros与之类似
c=np.full((3,2),2)
print('c',c)
d=np.eye(3)
print('d',d)
结果:
a [0 1 2 3 4 5 6 7 8 9]
b [[1. 1.]
[1. 1.]
[1. 1.]]
c [[2 2]
[2 2]
[2 2]]
d [[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
3、通过数组创建
Ex:
import numpy as np
a = np.array([[1, 2, 3], [1, 2, 3], [1, 2, 3]])
b = np.ones_like(a)
c = np.full_like(a, 3)
print('b', b)
print('c', c)
结果:
b [[1 1 1]
[1 1 1]
[1 1 1]]
c [[3 3 3]
[3 3 3]
[3 3 3]]
Ex:
import numpy as np
a = np.linspace(1,10,4)
b = np.linspace(1,10,4,endpoint = False)
c = np.concatenate((a,b))
print('a', a)
print('b', b)
print('c', c)`
结果:
a [ 1. 4. 7. 10.]
b [1. 3.25 5.5 7.75]
c [ 1. 4. 7. 10. 1. 3.25 5.5 7.75]
注:linspace(a,b,c)的作用是将(a,b)区间分成c-1份,数组内为c个边界点,如果加入endpoint=False则不包括b点 将区间c等分,数组内为前c个点
4、重组数组:
Ex:
import numpy as np
a = np.ones((2, 3, 4))
print('a', a)
b = a.reshape((3, 8))
print('b', b)
print('a', a)
a.resize((3, 8))
print('a', a)
e = a.flatten()
print('e', e)
结果:
a [[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
b [[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]]
a [[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]
[[1. 1. 1. 1.]
[1. 1. 1. 1.]
[1. 1. 1. 1.]]]
a [[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1.]]
e [1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
注:reshape返回的是一个重组后的数组,而resize则是将原数组进行重组,返回值为None;
5、转化数据类型:atype函数
Ex:
import numpy as np
a = np.ones((2, 3, 4),dtype = int)
print('a', a)
b = a.astype(dtype = float)
print('b', b)
结果:
a [[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]]
b [[[1. 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选择与原有的形式相同,则相当于进行了一次拷贝。
2、这里dtype选择的类型直接为int和float,但具体是多少位的由程序“自己选择”。