1. numpy:多维数据的创建
多维数据组(矩阵ndarray)
shape
:维度的大小ndim
:维度的个数dtype
:数据类型
1.1 随机抽样创建
1.1.1 rand
生成指定维度的随机多维度浮点型数组,范围[0,1)
>>> arr3 = np.random.rand(3,5)
>>> arr3
array([[0.63305909, 0.10998371, 0.88867374, 0.85709422, 0.98466576],
[0.02936647, 0.31256693, 0.64209498, 0.954163 , 0.93805274],
[0.11988711, 0.05113142, 0.53949646, 0.12933075, 0.81462957]])
>>> arr3.shape
(3, 5)
>>> arr3.ndim
2
>>> arr3.dtype
dtype('float64')
1.1.2 uniform
uniform(low=0.0, high=1.0, size=None)
>>> np.random.uniform(1,5,(3,4))
array([[3.75234365, 4.6141954 , 1.21824386, 3.65332011],
[1.18223551, 3.11600614, 3.65221365, 2.25886951],
[1.89128317, 1.17665316, 1.7609036 , 3.32347667]])
1.1.3 randint
randint(low, high=None, size=None, dtype='l')
>>> arr5 = np.random.randint(2,10,(3,4))
>>> arr5
array([[5, 8, 7, 7],
[4, 2, 9, 9],
[9, 8, 9, 6]])
注意点:
- 如果没有指定最大值,只是指定了最小值,范围是
[0,最小值)
- 如果有最小值,也有最大值,范围是
[最小值,最大值)
1.2 序列创建
1.2.1 array
-
通过列表进行创建
>>> lst1 = [1,2,3] >>> arr6 = np.array(lst1) [1 2 3]
-
通过列表嵌套列表创建
>>> list2 = [[1,2,3],[3,4,5]] >>> arr7 = np.array(list2). array([[1, 2, 3], [3, 4, 5]]) >>> list3 = [[1,2,3],[4,5,6,7]] >>> arr8=np.array(list3) [list([1, 2, 3]) list([4, 5, 6, 7])].
注意点:里面的个数需要一样
1.2.2 zeros
>>> np.zeros((3,4,5))
array([[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
注意点:
- 创建的数组里面的数据为0
- 默认的数据类型是
float
- 可以指定其他的数据类型
1.2.3 ones
>>> arr10 = np.ones((3,4,5))
[[[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.]
[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.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]]
1.2.4 arange
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(0,10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(0,10,3)
array([0, 3, 6, 9])
>>> arr12 = np.arange(15)
>>> arr12.reshape(3,5)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
>>> arr12
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
# reshape()不改变原来的数组
注意点:
- 只填写一位数
[0,这位)
- 填写两位
[最低位,最高位)
- 填写三位
[最低位,最高位,步长)
- 创建的是一维数组
- 等同于
np.array(range())
1.3 数组重新排列
>>> nd9 = np.arange(10)
[0 1 2 3 4 5 6 7 8 9]
>>> nd10 = nd9.reshape(2,5)
[[0 1 2 3 4]
[5 6 7 8 9]]
>>> nd9
[0 1 2 3 4 5 6 7 8 9]
注意点:
- 有返回值,返回新的数组,原始数组不受影响
- 进行维度大小的设置的过程中,要注意数据的个数,注意元素的个数
>>> arr12 = np.arange(15)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
>>> np.random.shuffle(arr12)
>>> arr12
array([ 9, 14, 8, 11, 0, 3, 12, 13, 7, 10, 2, 4, 5, 1, 6])
注意点:
- 在原始数据集上做的操作(更改元素数组)
- 将原始数组的元素进行重新排序,打乱顺序
shuffle
这个没有返回值
1.4 数据类型的转换
>>> class Dog(object):
... pass
>>> dog1 = Dog()
>>> dog2 = Dog()
>>> arr20 = np.array([dog1,dog2])
>>> print(arr20)
[<__main__.Dog object at 0x0000029BC94E7D30>
<__main__.Dog object at 0x0000029BC94E7DD8>]
>>> print(arr20.dtype)
object
>>> arr22 = np.array(list('hello python'))
>>> print(arr22)
['h' 'e' 'l' 'l' 'o' ' ' 'p' 'y' 't' 'h' 'o' 'n']
>>> print(arr22.dtype)
<U1 # unicode编码
>>> arr23 = np.array(['hello1','world'])
>>> print(arr23)
['hello1' 'world']
>>> print(arr23.dtype)
<U6
>>> arr21 = np.array([1,2,3])
>>> print(arr21)
[1 2 3]
>>> print(arr21.dtype)
int32
>>> arr24 = arr21.astype(np.int64)
>>> print(arr24)
[1 2 3]
>>> print(arr24.dtype)
int64
注意点:
astype()
不是在原始数组做操作,有返回值,返回的是更改数据类型的新数组- 在创建新数组的过程中,有
dtype
参数进行指定
1.5 数组转换列表
>>> arr1
[1 2 3]
>>> list(arr1)
[1, 2, 3]
>>> arr1.tolist()
[1, 2, 3]