Numpy 数组创建

本文详细介绍了使用Python序列、内置函数和文件读取等多种方式在NumPy中创建数组的方法,包括一维、二维及多维数组的创建。讨论了数组复制、连接和改变,以及从txt和csv文件加载数据。还展示了如何处理数据类型和溢出问题,以及随机数生成在数组创建中的应用。
摘要由CSDN通过智能技术生成

数组创建

创建数组有 6 种通用机制:

  • 从其他 Python 结构(即列表和元组)转换

  • 内在的 NumPy 数组创建函数(例如 arange、1、0 等)

  • 复制、加入或改变现有数组

  • 从磁盘读取数组,无论是标准格式还是自定义格式

  • 通过使用字符串或缓冲区从原始字节创建数组

  • 特殊库函数的使用(例如,随机)

您可以使用这些方法来创建 ndarrays 或Structured arrays。

将 Python 序列转换为 NumPy 数组

可以使用 Python 序列(例如列表和元组)定义 NumPy 数组。列表和元组分别使用[…]和定义(…)。列表和元组可以定义 ndarray 创建:

  • 一个数字列表将创建一个一维数组,

  • 列表列表将创建一个二维数组,

  • 进一步的嵌套列表将创建更高维的数组。通常,任何数组对象在 NumPy 中都称为ndarray。

>>> a1D = np.array([1, 2, 3, 4])
>>> a2D = np.array([[1, 2], [3, 4]])
>>> a3D = np.array([[[1, 2], [3, 4]],
                    [[5, 6], [7, 8]]])

使用numpy.array定义新数组时,应考虑数组中元素的dtype,可以明确指定。此功能使您可以更好地控制底层数据结构以及如何在 C/C++ 函数中处理元素。如果您不小心dtype 分配,您可能会遇到不必要的溢出,因此

>>> a = np.array([127, 128, 129], dtype=np.int8)
>>> a
array([ 127, -128, -127], dtype=int8)

一个 8 位有符号整数表示从 -128 到 127 的整数。将int8数组分配给此范围之外的整数会导致溢出。此功能经常会被误解。如果您使用 mismatching 执行计算dtypes,您可能会得到不需要的结果,例如:

>>> a = array([2, 3, 4], dtype = np.uint32)
>>> b = array([5, 6, 7], dtype = np.uint32)
>>> c_unsigned32 = a - b
>>> print('unsigned c:', c_unsigned32, c_unsigned32.dtype)
unsigned c: [4294967293 4294967293 4294967293] uint32
>>> c_signed32 = a - b.astype(np.int32)
>>> print('signed c:', c_signed32, c_signed32.dtype)
signed c: [-3 -3 -3] int64

请注意,当您对两个相同dtype: 的数组执行操作时 uint32,结果数组的类型相同。当您使用不同的 执行操作时dtype,NumPy 将分配一个新类型,该类型满足计算中涉及的所有数组元素,这里uint32并且int32都可以表示为int64。

默认的 NumPy 行为是分别以 64 位有符号整数或双精度浮点数int64和 来创建数组float。如果您希望数组是某种类型,那么您需要指定dtype创建数组的时间。

内在的 NumPy 数组创建函数

NumPy 有超过 40 个用于创建数组的内置函数,如数组创建例程中所述。这些函数可以根据它们创建的数组的维度大致分为三类:

  • 一维数组

  • 二维数组

  • 数组

一维数组创建函数

# 一维数组创建函数例如numpy.linspace和numpy.arange通常需要至少两个输入,start和stop。
>>> np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(2, 10, dtype=float)
array([ 2., 3., 4., 5., 6., 7., 8., 9.])
>>> np.arange(2, 3, 0.1)
array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])

>>> np.linspace(1., 4., 6)
array([ 1. ,  1.6,  2.2,  2.8,  3.4,  4. ])

二维数组创建函数
二维数组创建函数例如numpy.eye、numpy.diag和numpy.vander 定义表示为二维数组的特殊矩阵的属性。

np.eye(n, m)定义一个二维单位矩阵。i=j(行索引和列索引相等)的元素为 1,其余为 0,如下所示:

>>> np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])
>>> np.eye(3, 5)
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.]])

numpy.diag可以定义一个具有沿对角线给定值的方形二维数组:

>>> np.diag([1, 2, 3])
array([[1, 0, 0],
       [0, 2, 0],
       [0, 0, 3]])
>>> np.diag([1, 2, 3], 1)
array([[0, 1, 0, 0],
       [0, 0, 2, 0],
       [0, 0, 0, 3],
       [0, 0, 0, 0]])
>>> a = np.array([[1, 2], [3, 4]])
>>> np.diag(a)
array([1, 4])

一般 ndarray 创建函数

ndarray 创建函数,例如numpy.ones, numpy.zeros,并random根据所需的形状定义数组。

>>> np.zeros((2, 3))
array([[0., 0., 0.],
       [0., 0., 0.]])
>>> np.zeros((2, 3, 2))
array([[[0., 0.],
        [0., 0.],
        [0., 0.]],

       [[0., 0.],
        [0., 0.],
        [0., 0.]]])

numpy.ones将创建一个填充有 1 个值的数组。

>>> np.ones((2, 3))
array([[ 1., 1., 1.],
       [ 1., 1., 1.]])
>>> np.ones((2, 3, 2))
array([[[1., 1.],
        [1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.],
        [1., 1.]]])

numpy.random 创建各种数组

import numpy as np
np.random.rand(2,4)#[0,1)之间的浮点数
array([[0.67977477, 0.5149095 , 0.10177092, 0.91938221],
       [0.95192014, 0.87443815, 0.34748479, 0.45779791]])
#指定数学期望和方差的正态分布
# np.random.randn()
arr=2.5 * np.random.randn(2,4)+3  #2.5是标准差,3是期望
arr
array([[ 1.91951089,  4.94412015,  4.47746282,  8.64489976],
       [-1.66824526,  1.49159955,  5.86474873,  0.18926745]])
# numpy.random.random()方法返回随机生成的一个实数(浮点数),它在[0,1)范围内。
np.random.random((2,4))
array([[0.64301086, 0.64041592, 0.34696627, 0.80146329],
       [0.15012755, 0.65225712, 0.55239764, 0.33422284]])
#np.randint(low, high=None, size=None, dtype='l') 生成整数
#产生[0,10)之间的随机整数8个,以数组的形式返回

temp3=np.random.randint(10,size=8)
temp3
array([2, 9, 8, 9, 6, 6, 3, 3])

复制、加入或改变现有数组

创建阵列后,您可以复制、连接或改变这些现有阵列以创建新阵列。当您将一个数组或其元素分配给一个新变量时,您必须显式指定numpy.copy该数组,否则该变量是原始数组的视图。

>>> a = np.array([1, 2, 3, 4, 5, 6])
>>> b = a[:2]
>>> b += 1
>>> print('a =', a, '; b =', b)
a = [2 3 3 4 5 6]; b = [2 3]

在此示例中,您没有创建新数组。您创建了一个变量, b用于查看a. 当您将 1 添加到 时,b您将通过将 1 添加到 得到相同的结果a[:2]。如果要创建 新数组,请使用numpy.copy数组创建例程,如下所示:

>>> a = np.array([1, 2, 3, 4])
>>> b = a[:2].copy()
>>> b += 1
>>> print('a = ', a, 'b = ', b)
a =  [1 2 3 4 5 6] b =  [2 3]

有许多程序加入现有阵列例如numpy.vstack, numpy.hstack和numpy.block。以下是使用以下命令将四个 2×2 数组连接为 4×4 数组的示例block:

>>> A = np.ones((2, 2))
>>> B = np.eye((2, 2))
>>> C = np.zeros((2, 2))
>>> D = np.diag((-3, -4))
>>> np.block([[A, B],
              [C, D]])
array([[ 1.,  1.,  1.,  0. ],
       [ 1.,  1.,  0.,  1. ],
       [ 0.,  0., -3.,  0. ],
       [ 0.,  0.,  0., -4. ]])

txt,csv读取数组

>>> np.loadtxt('simple.csv', delimiter = ',', skiprows = 1) 
array([[0., 0.],
       [1., 1.],
       [2., 4.],
       [3., 9.]])
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用pandas库中的DataFrame函数从numpy数组创建DataFrame。具体步骤如下: 1. 导入pandas库和numpy库 ```python import pandas as pd import numpy as np ``` 2. 创建numpy数组 ```python arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) ``` 3. 使用DataFrame函数创建DataFrame ```python df = pd.DataFrame(arr, columns=['A', 'B', 'C']) ``` 其中,arr是numpy数组,columns是DataFrame的列名。 最终得到的DataFrame如下所示: ``` A B C 1 2 3 1 4 5 6 2 7 8 9 ``` ### 回答2: 在Pandas中,DataFrame是最常用的数据结构之一,它是一个二维的表格型数据结构,可以容纳不同类型的数据,并且可以在其中执行各种操作。Numpy数组是另外一个非常重要的数据结构,它提供了高效的数学计算和大规模数据处理所需要的基础。因此,将Numpy数组转换为DataFrame是很有意义的,以下是从Numpy数组创建DataFrame的步骤: 1. 导入numpy和pandas库。首先需要在程序中导入相应的库,例如 import numpy as np 和 import pandas as pd。 2. 创建Numpy数组。接下来,需要使用numpy创建一个Numpy数组。可以使用numpy库中的arange()函数、linspace()函数或random模块中的函数来创建数组。 3. 将Numpy数组转换为DataFrame。创建Numpy数组之后,可以使用pandas库中的DataFrame()函数将Numpy数组转换为DataFrame。其中,pandas.DataFrame()函数接受一组数组、字典或Series作为输入,并返回一个DataFrame对象。可以使用columns参数指定列标签。 下面是一个简单的示例来帮助您更好地理解这些步骤: ``` python import numpy as np import pandas as pd # 创建Numpy数组 data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 将Numpy数组转换为DataFrame df = pd.DataFrame(data, columns=['col1', 'col2', 'col3']) print(df) ``` 输出结果为: ``` col1 col2 col3 0 1 2 3 1 4 5 6 2 7 8 9 ``` 在这个示例中,我们创建了一个3x3大小的Numpy数组,并将它转换为一个名为df的DataFrame。在转换过程中,我们使用了pandas.DataFrame()函数并指定列标签为['col1', 'col2', 'col3']。之后,我们打印出DataFrame df的所有值。 最后,从Numpy数组创建DataFrame是一个很有用的技能,可以帮助我们更好地利用pandas和numpy库进行数据分析和数据处理。如果您对如何处理数据感兴趣,那么可以通过学习这些库的更多特性来提高自己的技能和效率。 ### 回答3: 在数据处理和分析中,numpy和pandas是两个非常重要的工具。pandas是基于numpy构建的数据分析库,它能够处理数据中的缺失值等问题,同时也提供了一些更方便的数据结构和API。在pandas中,DataFrame是一种非常常用的数据结构,因为它能够自动地将numpy数组转化为类似表格的数据结构。 从numpy数组创建DataFrame非常简单,只需调用pandas中的DataFrame函数即可,下面是详细步骤: 首先,导入numpy和pandas两个库: import numpy as np import pandas as pd 然后,创建一个2行3列的numpy数组,作为DataFrame的数据: array = np.array([[1,2,3],[4,5,6]]) 接着,将该数组转化为DataFrame: df = pd.DataFrame(array) 这个DataFrame有两行三列,和原来的numpy数组形状相同。DataFrame默认会自动为每列分配索引,但是你可以自己指定: df = pd.DataFrame(array, index=['row1', 'row2'], columns=['col1', 'col2', 'col3']) 这个DataFrame的行索引为 “row1” 和 “row2”,列索引为 “col1”、“col2” 和“col3”。 总的来说,从numpy数组创建DataFrame非常简单,只需调用pandas的DataFrame函数,并将numpy数组作为输入即可。 DataFrame可以自动分配索引,但也可以手动指定索引。如果你经常使用numpy来处理数据,将数据转化为pandas DataFrame格式会让你更方便地进行数据处理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ACxz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值