第一个函数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