深度学习笔记之(三)python科学计算库numpy

第一个函数genfromtxt

功能:读取txt文件

使用示例

world_alcohol = np.genfromtxt('world_alcohol.txt', delimiter=',', dtype=str)

在当前目录下读取一个名字叫“world_alcohol.txt”的文本文件

Parameters

genfromtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None,skip_header=0, skip_footer=0, converters=None, missing_values=None)

fname:要读取的文件、文件名、列表或生成器.如果文件是压缩文件,第一步要做就是解压;

dtype:返回值的数据类型。如果是默认,那么dtype将由每一列的内容单独确定;

delimiter:用于分隔值的字符串。默认情况下,任何连续的空白空间都充当分隔符。整数或整数序列也可以作为每个字段的宽度提供。

通过索引取出某一位置的值

print(world_alcohol[2,4]) #取出world_alcohol第二行第二列的数据

注意



函数array

功能:构造矩阵

使用示例

构造一维矩阵

vector = np.array([1,2,3,4])

构造二维矩阵

matrix = np.array([[1,3,2],[5,4,6]])

查找矩阵中是否含有某个数

vector = np.array([21,34,5,10,23])
equal_to_ten = (vector == 10)
print(equal_to_ten)
print(vector[equal_to_ten])

运行结果:

[False False False  True False]
[10]



数据类型转换

vector = np.array(["1","2","3"])
print(vector)
print(vector.dtype)
vector = vector.astype(int)
print(vector)
print(vector.dtype)

运行结果:

['1' '2' '3']
<U1
[1 2 3]
int32

注意

(1)np.array中传入的数据类型必须是一致的,若改变其中的一个值的类型,其他的数据都相应变化;

(2)np.array可以使用布尔值作为索引,如“查找矩阵中是否含有某个数”的示例



常用的函数

reshape:改变结构

ndim:返回矩阵的维度

shape:返回矩阵的行列数

dtype:返回矩阵的类型

size:矩阵的大小

示例

import numpy as np
a = np.arange(12)
print('a:\n',a)
print('a.reshape:\n',a.reshape(3,4))
print('a.ndim\n',a.ndim)
print('a.dtype\n',a.dtype)
print('a.size\n',a.size)
print('a.shape\n',a.shape)

运行结果:

a:
 [ 0  1  2  3  4  5  6  7  8  9 10 11]
a.reshape:
 [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
a.ndim
 1
a.dtype
 int32
a.size
 12
a.shape
 (12,)



生成一个序列

arange

import numpy as np
a = np.arange(12)
b = np.arange(10,30,5)
print('a:',a)
print('b:',b)

运行结果:

a: [ 0  1  2  3  4  5  6  7  8  9 10 11]
b: [10 15 20 25]

linspace

功能:指定起止数据,平均间隔指定的间距,创建一个序列

import numpy as np
a = np.linspace(0, 0.5, 5)
print('a:\n',a)

运行结果:

a:
 [0.    0.125 0.25  0.375 0.5  ]



“.” 乘和 "*" 乘

import numpy as np
a = np.array([[1, 0],[2, 1]])
b = np.array([[0, 1],[1, 2]])
print(a)
print('--------------------')
print(b)
print('--------------------')
r = a*b
print(r)
print('--------------------')
r = a.dot(b)
print(r)

运行结果:

[[1 0]
 [2 1]]
--------------------
[[0 1]
 [1 2]]
--------------------
[[0 0]
 [2 2]]
--------------------
[[0 1]
 [1 4]]

注意:

“.” 乘:对应的元素相乘

"*" 乘:执行矩阵的乘法



矩阵的拼接

hstack:横向拼接

vstack:纵向拼接

示例:

import numpy as np
a = np.array([[1, 0],[2, 1]])
b = np.array([[0, 1],[1, 2]])
print(a)
print('--------------------')
print(b)
print('--------------------')
r = np.hstack((a,b))
print(r)
print('--------------------')
r = np.vstack((a,b))
print(r)

运行结果:

[[1 0]
 [2 1]]
--------------------
[[0 1]
 [1 2]]
--------------------
[[1 0 0 1]
 [2 1 1 2]]
[[1 0]
 [2 1]
 [0 1]
 [1 2]]


三种复制操作的区别

普通赋值操作

import numpy as np
a = np.arange(20)
b = a
print(a is b)
b.shape = (4,5)
print(a.shape)
print(id(a))
print(id(b))

运行结果:

True
(4, 5)
2092879734544
2092879734544

view()操作

c = a.view()
print(a is c)
print('c:\n',c)
c[0, 0] = 1212
print('a:\n',a)
print('c:\n',c)
print(id(a))
print(id(c))

运行结果:

False
c:
 [[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
a:
 [[1212    1    2    3    4]
 [   5    6    7    8    9]
 [  10   11   12   13   14]
 [  15   16   17   18   19]]
c:
 [[1212    1    2    3    4]
 [   5    6    7    8    9]
 [  10   11   12   13   14]
 [  15   16   17   18   19]]
2945300588304
2945301590704

copy()操作

d = a.copy()
print(d is a)
d[0,0] = 521
print('d:\n',d)
print('a:\n',a)
print(id(a))
print(id(d))

运行结果

False
d:
 [[521   1   2   3   4]
 [  5   6   7   8   9]
 [ 10  11  12  13  14]
 [ 15  16  17  18  19]]
a:
 [[1212    1    2    3    4]
 [   5    6    7    8    9]
 [  10   11   12   13   14]
 [  15   16   17   18   19]]
2721210197776
2721212875440

结论:

(1)赋值操作:两个变量除了名字代号不一样,其他都一样。它们的内容一个改变,另一个也跟着改变

(2)view()操作:浅复制,地址也一样。内容同样一个改变,另一个也跟着改变

(3)copy()操作:深层复制。地址、内容都不一样。


★Last edit 2018.11.4 morning 

★by plsong

猜你喜欢

转载自blog.csdn.net/plSong_CSDN/article/details/83687667