numpy基础之ndarray其他属性

1 numpy基础之ndarray其他属性

python数据分析的numpy库的ndarray对象除了内存布局属性外,还有数据类型属性及T、real等其他属性。

1.1 数据类型属性

ndarray的数据类型属性如下:

NO属性描述
1dtype数组元素的数据类型

1.1.1 dtype

描述

ndarray.dtype返回数组元素的数据类型。

示例

>>> import numpy as np
>>> arr1=np.array([1,2,3])
>>> arr1
array([1, 2, 3])
# 通过 ndarray.dtype 获取ndarray的数据类型
>>> arr1.dtype
dtype('int32')

1.2 其他属性

ndarray的数据类型属性如下:

NO属性描述
1T转置数组
2real复数数组的实部
3imag复数数组的虚部
4flat数组的一维迭代器
5ctypes用于简化数组与ctypes模块交互的对象

1.2.1 T

描述

ndarray.T对数组进行转置,原数组不变。

一维数组转置前后相同。

二维及以上数组,转置后,轴数量不变,形状改变。

示例

>>> import numpy as np
>>> ar1=np.array([1,2,3])
>>> ar1
array([1, 2, 3])
# T对数组进行转置,生成新的数组,原数组不变
# 一维数组转置前后相同
>>> ar1.T
array([1, 2, 3])
>>> ar2=np.array([[1,2,3],[5,6,7]])
>>> ar2
array([[1, 2, 3],
       [5, 6, 7]])
# 二维数组,转置后,轴数量不变,形状改变
>>> ar2T=ar2.T     
>>> ar2T
array([[1, 5],
       [2, 6],
       [3, 7]])
>>> ar2.ndim
2
>>> ar2.shape
(2, 3)
>>> ar2T.ndim # 轴数量不变
2
>>> ar2T.shape # 形状改变,轴大小互换
(3, 2)
>>> ar3=np.array([[[1,2,3],[5,6,7]]])
>>> ar3
array([[[1, 2, 3],
        [5, 6, 7]]])
# 三维数组,转置后,轴数量不变,形状改变
>>> ar3T=ar3.T
>>> ar3T
array([[[1],
        [5]],

       [[2],
        [6]],

       [[3],
        [7]]])
>>> ar3.ndim
3
>>> ar3.shape
(1, 2, 3)
>>> ar3T.ndim # 轴数量不变
3
>>> ar3T.shape # 形状改变,轴大小互换
(3, 2, 1)

1.2.2 real

描述

ndarray.real返回数组复数数据类型的实部。

z=a+bj,z表示复数,a为复数的实部,b为复数的虚部。

示例

>>> import numpy as np
# z=a+bj,z表示复数,a为复数的实部,b为复数的虚部
>>> ar1=np.array([1+2j,3+5j])
>>> ar1
array([1.+2.j, 3.+5.j])
# real 返回复数的实部
>>> ar1.real
array([1., 3.])

1.2.3 imag

描述

ndarray.imag返回数组复数数据类型的虚部。

示例

>>> import numpy as np
# z=a+bj,z表示复数,a为复数的实部,b为复数的虚部
>>> ar1=np.array([1+2j,3+5j])
>>> ar1
array([1.+2.j, 3.+5.j])
# imag 返回复数的虚部
>>> ar1.imag
array([2., 5.])

1.2.4 flat

描述

numpy.ndarray.flat 返回数组全部元素组成的一维迭代器。

类似内置迭代器对象,支持索引和遍历等操作。

示例

>>> import numpy as np
>>> ar1=np.array([[1,2,3],[4,5,6]])
>>> ar1
array([[1, 2, 3],
       [4, 5, 6]])
# numpy.ndarray.flat返回数组的全部元素组成的一维迭代器
>>> ar1_flat=ar1.flat 
>>> from collections.abc import Iterable
# flat 返回可迭代对象
>>> isinstance(ar1_flat,Iterable)
True
# 遍历 flat 返回的迭代器
>>> [i for i in ar1_flat]
[1, 2, 3, 4, 5, 6]
# 支持索引操作
>>> ar1_flat[2]
3
# 获取长度
>>> len(ar1_flat)
6
# 转换为list
>>> list(ar1_flat)
[1, 2, 3, 4, 5, 6]
>>> ar1_T=ar1.T
>>> ar1_T_flat=ar1_T.flat
>>> ar1_T
array([[1, 4],
       [2, 5],
       [3, 6]])
>>> [i for i in ar1_T_flat]
[1, 4, 2, 5, 3, 6]

1.2.5 ctypes

描述

numpy.ndarray.ctypes 返回一个对象,用于简化数组与ctypes模块的交互。

numpy.ndarray.ctypes.data 返回数组内存地址。

numpy.ndarray.ctypes.data_as 返回数据指针,指向数组的引用。

(ctypes.c_uint32*ar1.size).from_address(numpy.ndarray.ctypes.data) 创建与ndarray相同地址的数组。

示例

>>> import numpy as np
>>> import ctypes as ct
>>> ar1=np.array([[11,12,13],[15,16,18]])
>>> ar1
array([[11, 12, 13],
       [15, 16, 18]])
>>> ar1.dtype
dtype('int32')
# numpy.ndarray.ctypes 返回一个对象,
# 用于简化数组与ctypes模块的交互。
>>> ar1_ctypes=ar1.ctypes
# data 返回数组内存区域的指针,为整数
>>> cdata=ar1_ctypes.data
>>> ar1_ctypes
<numpy.core._internal._ctypes object at 0x000001FBFFEAEF10>
>>> cdata
2181668883056
# data_as 返回数据指针,指向数组的引用
>>> cdata32=ar1_ctypes.data_as(ct.POINTER(ct.c_uint32))
>>> cdata32
<__main__.LP_c_ulong object at 0x000001FBFFF26440>
# 对 data_as 数据进行遍历
>>> [cdata32[i] for i in range(ar1.size)]
[11, 12, 13, 15, 16, 18]
# 创建数组b,共用 numpy.ndarray.ctype.data 地址 
# ar1_ctypes 与 b 进行交互
>>> b=(ct.c_uint32*ar1.size).from_address(cdata)
>>> b
<__main__.c_ulong_Array_6 object at 0x000001FBFFECEE40>
>>> b[:]
[11, 12, 13, 15, 16, 18]
# 修改 ar1 的第1个元素
>>> ar1[0][0]
11
>>> ar1[0][0]=21
>>> ar1[0][0]
21
>>> ar1
array([[21, 12, 13],
       [15, 16, 18]])
# b的元素也被修改,因为指向相同的地址     
>>> b[:]
[21, 12, 13, 15, 16, 18]
# 修改 b 的元素
>>> b[1]=22
>>> b[:]
[21, 22, 13, 15, 16, 18]
>>> ar1
array([[21, 22, 13],
       [15, 16, 18]])
  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
报错信息"'numpy.ndarray' object has no attribute 'numpy'"表示numpyndarray对象没有名为numpy属性。这通常是由于代码中的错误或不正确的使用numpy库导致的。 通常情况下,这种错误可能是由于导入numpy库时发生错误。请确保正确导入numpy库并使用正确的方式引用它的功能。 另一种可能的原因是在代码中使用了无效的numpy对象或属性。请仔细检查代码中的numpy对象和属性的使用,确保它们正确命名并正确引用。 如果您在使用numpy的特定功能时遇到此错误,请查看官方文档和教程,以确保您正确使用了该功能。 综上所述,解决此错误的方法是检查numpy库的导入是否正确,并确保正确引用numpy对象和属性。如果问题仍然存在,请进一步检查您的代码,确保没有其他错误或不正确的使用numpy库的情况发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python numpy库的使用 python基础,演示了numpy库的使用,提供python2例程代码,适合初学者](https://download.csdn.net/download/li171049/88225556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python报错AttributeError: ‘numpy.ndarray‘ object has no attribute ‘rint](https://blog.csdn.net/cslcdfjd/article/details/124063631)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [AttributeError:numpy.ndarray‘ object ‘ has no attribute ‘read‘ or ‘seek](https://blog.csdn.net/wxy98520/article/details/124883655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值