初始化
1、从list初始化一个ndarray
arr = np.array([1, 2, 3]) #list转ndarry
li =arr.tolist() #ndarry转list
print(type(arr),type(li))
<class 'numpy.ndarray'> <class 'list'>
2、通过内置函数初始化
arr = np.zeros((2, 3)) #初始化一个2*3的元素全为0的数组
arr = np.ones((1, 2)) #初始化一个1*2的元素全为1的数组
arr = np.full((2, 2), 8) #初始化一个2*2的元素全为8的数组
arr = np.eye(3) #初始化一个3*3 的对角线元素为1,其余全为0的数组(单位矩阵)
arr = np.random.random((3, 2)) #初始化一个3*2的,填充任意数字的数组
arr = np.empty((2, 3, 4)) #初始化一个2*3*4的数组,不填充
查看数组的维度
arr = np.array([[1, 2, 3],[4, 5, 6]])
print(arr,'\n\n' ,arr.shape)
[[1 2 3]
[4 5 6]]
(2, 3)
定义及查看数组中数据的类型
numpy在初始化数组时会自动匹配合适的类型,但也可指定
arr1 = np.array([[1, 2, 3],[4, 5, 6]])
arr2 = np.array([[1, 2, 3],[4, 5, 6]],dtype=np.float) #指定数据类型为float
print(arr1,'\n' ,arr1.dtype) #查看arr1的数据的类型
print()
print(arr2,'\n' ,arr2.dtype) #查看arr2的数据的类型
[[1 2 3]
[4 5 6]]
int32
[[1. 2. 3.]
[4. 5. 6.]]
float64
[[1 2 3]
[4 5 6]]
int32
[[1. 2. 3.]
[4. 5. 6.]]
float64
使用astype()复制数组并转换数据类型
arr = np.array([[1, 2, 3],[4, 5, 6]])
float_arr = arr.astype(np.float64)
print(arr.dtype,float_arr.dtype)
int32 float64
注:使用astype()将float转换为int时,小数部分将被舍弃
字符串类型的数字可转为数值型,有其他字符则会报错
astype()使用其他数组类型作为参数
int_arr = np.array([1, 2, 3])
float_arr = np.array([1.2, 2.5, 6.1])
print(float_arr.astype(dtype=int_arr.dtype))
[1 2 6]
数组内元素取值和赋值
1、像list一样切片
(注意切片结果不同)
a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
b = a[1,:] #[4 5 6]
c = a[1:2,:] #[[4 5 6]]
d = a[[1],:] #[[4 5 6]]
注意此时相当于引用,修改b、c、d的值都会修改a
c[0][0] += 10
print(c,'\n\n',a)
[[14 5 6]]
[[ 1 2 3]
[14 5 6]
[ 7 8 9]]
若不想使用引用,则应使用copy():
a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
c = a[1:2,:].copy() #[[4 5 6]]
c[0][0] += 10
print(c,'\n\n',a)
[[14 5 6]]
[[1 2 3]
[4 5 6]
[7 8 9]]
2、更灵活的方法
a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
b = a[[0, 1, 2],[1, 0, 2]]
print(a,'\n\n',b)
[[1 2 3]
[4 5 6]
[7 8 9]]
[2 4 9]
3、条件判断
a = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
print(a[a>2])
#上面相当于:
bool_index = (a > 2) #定义一个bool索引
print(a[bool_index])
[3 4 5 6 7 8 9]
[3 4 5 6 7 8 9]
但是这样会损失维度信息
关于numpy这东西就是要多用,熟练使用就好了,很多规则或者功能,自己用着用着就行了,不会就查。
更多参考:
https://blog.csdn.net/u010496337/article/details/50572866/
https://blog.csdn.net/A_pinkpig/article/details/105235294
https://blog.csdn.net/u014636245/article/details/102574938
https://www.cnblogs.com/logo-88/p/9265015.html
https://www.cnblogs.com/lavender1221/p/12641195.html