Numpy.array()的参数详细讲解---包括subok参数讲解

定义numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)

 

参数解释: object: 表示一个数组序列

    dtype: 可选参数,通过它可以更改数组的数据类型---可将原来的整型或者其他类型进行强制转换
    
    copy: 可选参数,当数据源是ndarray 时表示数组能否被复制,默认是True
    
    order: 可选参数,以哪种内存布局创建数组,有3个可选值,分别是C(行序列)/F(列序列)/A(默认)
    
    ndmin: 可选参数,用于指定数组的维度--例如 一维数组、二维数组、三维数组等
    
    subok: 可选参数,类型为bool值,默认为False。  为True,使用object的内部数据类型; 为False 使用object数组的数据类型

1.设置dtype参数,默认自动识别,强制转换

实现代码如下:

a=np.array([1,2,3,4,5])
print(a)
#设置数组元素类型
has_dtype_a=np.array([1,2,3,4,5],dtype='float')
has_dtype_a

输出结果如下:

60152fe679ec45c681513f65dad2eab3.png

 

思考如何将浮点型数据,设置为整型,会是什么情况

----强制转换的过程中,直接取整数

实现代码如下:

np.array([1.1,2.5,3.8,4,5],dtype='int')

输出结果如下:

c1d867ecbf4747fea5957cc6a8aaf893.png

python中基础的赋值操作,当一个值赋值给另一个值时,一个值改变另一个值也会改变

         ---原因:python中基础赋值操作,赋值和被赋值的数的地址都是相同的

my_list1=[1,2,3,4]
my_list2=my_list1
print(my_list2)
my_list2[1]=10
print(my_list1)
my_list2

输出结果如下:

81a2fb433a6844adac7922caac68f7f5.png

 获取其两个列表ID的代码如下:

print(id(my_list1))
print(id(my_list2))

输出结果如下:

f24f7e1cc4ad4a1db615649be4b0f616.png可以发现两个链表地址指针指向同一个地址,故改变一个列表中的值,另一个列表中的值也相应改变

2.设置copy参数,默认为True

三种拷贝方法如下:

1、实现代码b=np.array(a)如下:

a=np.array([1,2,3,4])
#定义b数组,赋值a
b=np.array(a)
print(b)
#输出a和b的id值
print('a的id:',id(a))
print('b的id:',id(b))

 输出结果如下:

84b7f27d4be04b60a5a11c2f2f56cf3f.png

后续代码如下:
 

#当修改b的值时,a不会发生变化
b[0]=10
print('a:',a,'b:',b)
print('='*10)

  输出结果如下:

fe33f9dace394f63bbedf58a41adbe62.png

这种b=a的直接赋值操作,是试图操作,相当于列表的引用赋值

---------这种试图操作,会导致修改b元素时,a的元素也会发生变化

后续代码如下:

a=np.array([1,2,3,4])
#定义b数组,赋值a
b=a
print(b)
#输出a和b的id值
print('a的id:',id(a))
print('b的id:',id(b))

   输出结果如下:

7ba5a93025c54b399498fae900598c51.png

3.ndmin 用于指定数组的维度

实现代码如下:
 

a=np.array([1,2,3,4])
print(a)
a=np.array([1,2,3,4],ndmin=2)
print(a)
a.ndim

    输出结果如下:

10c8e7cb20d04044b30311f415aaea1d.png----一维数组a在ndmin=2的转换下成为二维数组

4.subok参数,类型为bool值,默认为False。为True时,使用object的内部数据类型; 为False时,使用数组的数据类型

--------如果为True,则新创建的数组将使用子类类型“a”,否则它将是基类数组

实现代码如下:
 

#创建矩阵
a=np.mat([1,2,3,4])
#输出为矩阵类型
print(type(a))
#既要赋值一份副本,又要保持原类型
at=np.array(a,subok=True)
af=np.array(a) #默认为False
print('at.subok为True:',type(at))
print('af.subok为False:',type(af))
print(id(af),id(a))

输出结果如下:

30480cf81e884d63a463593bb3b2952c.png

----可以看到在subok=True时创建的数组会为真正的子类类型也就是其内部数据类型是小类,在subok=False时创建的数组为基类也就是数组的数据类型是一大类

 

(注:以上所有代码均可直接复制粘贴在jupyter中直接运行)

 

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值