Bootstrap

numpy学习笔记2:ones = np.ones((2, 4)) 的详解

numpy学习笔记2:ones = np.ones((2, 4)) 的详解

np.ones() 是 NumPy 中用于创建全 1 数组的核心函数,其用法和参数与 np.zeros() 类似,但生成的数组元素值全部为 1。以下是详细解释:


1、语法

numpy.ones(shape, dtype=float, order='C')
  • 作用:生成一个指定形状和数据类型的全 1 数组。

  • 参数

    • shape:数组的形状,以元组形式传递(如 (2,4) 表示 2 行 4 列的二维数组)。

    • dtype(可选):数组的数据类型,默认为 float(浮点数)。

    • order(可选):内存存储顺序,一般无需修改('C' 表示行优先,'F' 表示列优先)。


2、示例代码

import numpy as np

# 创建一个 2x4 的全 1 数组,默认数据类型为 float
ones_array = np.ones((2, 4))
print(ones_array)

输出

[[1. 1. 1. 1.]
 [1. 1. 1. 1.]]

3、参数详解

1. 形状参数 shape
  • 必须是一个元组,表示数组的维度。

  • 一维数组

    np.ones(5)       # 输出:[1. 1. 1. 1. 1.]
    np.ones((5,))    # 推荐显式写法
  • 高维数组

    # 三维数组(形状为 2x3x4)
    np.ones((2, 3, 4))
2. 数据类型 dtype
  • 默认生成浮点数(float64),可通过 dtype 指定其他类型:

    # 生成整数类型的全 1 数组
    int_ones = np.ones((3, 2), dtype=int)
    print(int_ones)

    输出

    [[1 1]
     [1 1]
     [1 1]]
3. 存储顺序 order
  • 默认 'C'(行优先存储),适用于大多数场景。'F' 表示列优先(类似 MATLAB)。


4、返回数组的属性验证

ones_array = np.ones((2, 4))

print("形状(shape):", ones_array.shape)  # 输出 (2, 4)
print("数据类型(dtype):", ones_array.dtype)  # 输出 float64
print("维度数(ndim):", ones_array.ndim)   # 输出 2(二维)
print("元素总数(size):", ones_array.size)  # 输出 8

5、应用场景

  1. 初始化基准值

    # 初始化神经网络权重(全 1 作为初始值)
    weights = np.ones((10, 5))  # 10 个神经元,5 个输入
  2. 模板生成

    # 创建掩模模板(全 1 表示保留区域)
    mask = np.ones((100, 100), dtype=bool)
    mask[20:80, 20:80] = False  # 中心区域设为 False
  3. 数值计算占位

    # 计算单位矩阵(利用全 1 数组)
    identity_matrix = np.ones((3, 3)) - np.eye(3)

6、常见问题

Q1:np.ones() 和 np.zeros() 的区别?
  • np.ones() 初始化为 1,np.zeros() 初始化为 0。其他参数和用法完全一致。

Q2:如何生成全 1 的布尔数组?
  • 设置 dtype=bool,但注意:1 在布尔类型中会转换为 True

    bool_ones = np.ones((2, 2), dtype=bool)
    print(bool_ones)

    输出

    [[ True  True]
     [ True  True]]
Q3:为什么 shape=(2,4) 生成的是 2 行 4 列?
  • NumPy 遵循 (行, 列) 的约定,与数学中的矩阵表示一致。


7、对比其他函数

函数功能初始化值
np.ones()创建全 1 数组1
np.zeros()创建全 0 数组0
np.empty()创建未初始化数组随机值
np.full()创建全为指定值的数组自定义值

通过 np.ones(),你可以快速生成任意形状的全 1 数组,适用于初始化、模板生成等场景。

;