我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文讲两个非常常见的numpy快速获取数组的方式,获得ndarray的成员全为零或者全为一。对,函数就是np.zeros()np.ones(),功能就是获得全部为零或者一的ndarray。两者功能上非常类似,所以合并放在同一篇文章里面。

苏南大叔:如何利用numpy快速获得一个全为0或1的ndarray变量? - numpy-zeros-ones
如何利用numpy快速获得一个全为0或1的ndarray变量?(图4-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码编程经验文章。本文测试环境:win10python@3.11.0numpy@1.24.2

函数原型

原型如下:

numpy.zeros(shape, dtype=None, order='C')
numpy.ones(shape, dtype=None, order='C')
  • shape是一个整数或整数元组,用于指定输出数组的形状。
  • dtype是数据类型,默认为float
  • order指定数组的存储顺序,默认为C,即按行存储。修改成F,意思是按列存储。

定义形状shape【最常用】

直接定义返回值的shape即可。例如:

import numpy as np

s0 = np.array([0, 0, 0])
s1 = np.zeros(3)
s2 = np.ones((3,))
s3 = np.zeros((1, 3))
s4 = np.ones((3, 1))

print(s0, type(s0))
print(s1, type(s1))
print(s2, type(s2))
print(s3, type(s3))
print(s4, type(s4))

输出:

[0 0 0] <class 'numpy.ndarray'>
[0. 0. 0.] <class 'numpy.ndarray'>
[1. 1. 1.] <class 'numpy.ndarray'>
[[0. 0. 0.]] <class 'numpy.ndarray'>
[[1.]
 [1.]
 [1.]] <class 'numpy.ndarray'>

苏南大叔:如何利用numpy快速获得一个全为0或1的ndarray变量? - zeros代码1
如何利用numpy快速获得一个全为0或1的ndarray变量?(图4-2)

定义类型dtype【默认是float64】

这个不怎么常用,实际上就是说定义"数字零或一"是整形还是浮点型,没有啥特别的意义,默认是浮点型。

例如:

import numpy as np

s0 = np.array([0, 0, 0])
s1 = np.zeros(3, dtype="int")
s2 = np.ones((3,), dtype="int32")
s3 = np.zeros((1, 3), dtype="float")
s4 = np.ones((3, 1), dtype="float64")
s5 = np.zeros((2, 2), dtype=int)
s6 = np.ones((2, 2), dtype=float)

print(s0, s0.dtype)
print(s1, s1.dtype)
print(s2, s2.dtype)
print(s3, s3.dtype)
print(s4, s4.dtype)
print(s5, s5.dtype)
print(s6, s6.dtype)

输出:

[0 0 0] int32
[0 0 0] int32
[1 1 1] int32
[[0. 0. 0.]] float64
[[1.]
 [1.]
 [1.]] float64
[[0 0]
 [0 0]] int32
[[1. 1.]
 [1. 1.]] float64

苏南大叔:如何利用numpy快速获得一个全为0或1的ndarray变量? - zeros代码2
如何利用numpy快速获得一个全为0或1的ndarray变量?(图4-3)

定义存储顺序order【无感】

一共有两种,默认order=C,按行存储。或者order=F,按列存储。对于zeros()或者ones()来说,这个order参数设置结果完全无感。(因为所有的成员变量都一样,order就没有啥意义了。)

也并不是说这个order参数没有什么作用,有作用。记住C就是大家所需要的,F参数会给大家带来认知上的困扰。
import numpy as np

s1 = np.zeros(3, dtype="int", order="C")
s2 = np.ones((3,), dtype="int32", order="F")

print(s1)
print(s2)

输出:

[0 0 0]
[1 1 1]

苏南大叔:如何利用numpy快速获得一个全为0或1的ndarray变量? - zeros代码3
如何利用numpy快速获得一个全为0或1的ndarray变量?(图4-4)

结束语

计算机代码就是零或者一的世界,直接生成全为零或者一的矩阵(数组)具有重要的数据初始化意义。更多python经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python