Python | Numpy | 初始化,维度,数据类型,复制,取值赋值

初始化

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值