为了账号安全,请及时绑定邮箱和手机立即绑定

创建二维 NumPy 数组 (Python)

创建二维 NumPy 数组 (Python)

千万里不及你 2021-11-09 14:41:10
NumPy 新手。我在下面的np_2d 中创建了一个简单的二维数组。效果很好。当然,我通常需要通过附加和/或连接现有数组来创建 Nd 数组,所以我接下来会尝试。np.append 方法(带或不带轴参数)似乎没有做任何事情。我尝试使用 .concantenate() 和/或简单地用 np 数组替换原始列表也失败了。我敢肯定这是微不足道的...只是对我来说不是微不足道的 ATM。有人可以将我推向正确的方向吗?泰。import numpy as np# NumPy 2d array:np_2d = np.array([[1.73, 1.68, 1.71, 1.89, 1.79], [65.4, 59.2, 63.6, 88.4, 68.7]])print (np_2d) # [[ 1.73  1.68  1.71  1.89  1.79]# [65.4  59.2  63.6  88.4  68.7 ]]print (np_2d[1]) # second list# [65.4 59.2 63.6 88.4 68.7]np_2d_again = np.array([1.1, 2.2, 3.3])np.append(np_2d_again, [4.4, 5.5, 6.6])print(np_2d_again)# wrong: [1.1 2.2 3.3], expect [1.1 2.2 3.3], [4.4, 5.5, 6.6]# or MAYBE [1.1 2.2 3.3, 4.4, 5.5, 6.6]np_2d_again = np.array([[1.1, 2.2, 3.3]])np.concatenate(np_2d_again, np.array([4.4, 5.5, 6.6]))# Nope: TypeError: only integer scalar arrays can be converted to a scalar indexprint(np_2d_again)np_height = np.array([1.73, 1.68, 1.71, 1.89, 1.79])np_weight = np.array([65.4, 59.2, 63.6, 88.4, 68.7])np2_2d_again = np.array(np_height, np_weight)# Nope: TypeError: data type not understoodheight = [1.73, 1.68, 1.71, 1.89, 1.79]weight = [65.4, 59.2, 63.6, 88.4, 68.7]np2_2d_again = np.array(height, weight)# Nope: TypeError: data type not understood
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

对于此类问题,文档可能非常有用。在这里查看它们:


numpy.append

numpy.concatenate

使用这些你会发现:


In [2]: np_2d = np.array([[1.73, 1.68, 1.71, 1.89, 1.79], [65.4, 59.2, 63.6, 88.4, 68.7]])

   ...: 

In [2]: np_2d

Out[2]: 

array([[ 1.73,  1.68,  1.71,  1.89,  1.79],

       [65.4 , 59.2 , 63.6 , 88.4 , 68.7 ]])

注意输入到np.array. 它是一个列表,包含 2 个等长的列表。


In [3]: np_2d_again = np.array([1.1, 2.2, 3.3])

In [4]: np.append(np_2d_again, [4.4, 5.5, 6.6])

Out[4]: array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6])

查看np.append文档。看看关于 raveling 怎么说?它将一个 (3,) 数组连接到另一个数组,结果是 (6,)。


np.append名字很差,经常被误用。它不是列表追加的替代品。一方面,它没有就地运行。


在您的 中np.concatenate(np_2d_again, np.array([4.4, 5.5, 6.6])),您会收到错误,因为它需要一个轴号作为第二个参数。重读文档。您需要提供要加入的数组的列表。 np.append可能误导了。


正确的使用方法concatenate:


In [6]: np.concatenate([np_2d_again, np.array([4.4, 5.5, 6.6])])

Out[6]: array([1.1, 2.2, 3.3, 4.4, 5.5, 6.6])

但由于两个输入都是 (3,),它们只能在 0 轴上连接,形成 (6,) 形状。


np2_2d_again = np.array(np_height, np_weight)有一个类似的问题。第二个参数应该是一个 dtype,而不是另一个数组。你np.array第一次使用正确。


In [7]: np.array([np_2d_again, np.array([4.4, 5.5, 6.6])])

Out[7]: 

array([[1.1, 2.2, 3.3],

       [4.4, 5.5, 6.6]])

np.array沿新轴连接组件。它处理数组列表的方式与原始列表列表基本相同。


np.stack是一个有用的前端concatenate,其行为类似于np.array(在使用轴时具有更大的灵活性):


In [8]: np.stack([np_2d_again, np.array([4.4, 5.5, 6.6])])

Out[8]: 

array([[1.1, 2.2, 3.3],

       [4.4, 5.5, 6.6]])


查看完整回答
反对 回复 2021-11-09
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信