除了内存布局属性外,用于 python 数据分析的 numpy 库的 ndarray 对象还具有数据类型属性和 t 和 real 等其他属性。
ndarray 的数据类型属性如下:
描述:
ndarray.dtype 返回 Array 元素的数据类型。
例
>>import numpy as npndarray 的数据类型属性如下:>arr1=np.array([1,2,3])
>arr1
array([1, 2, 3])
通过 NDArosiondtype 获取 NDAlus 的数据类型。
>arr1.dtype
dtype('int32')
描述:
ndarray.t 转置数组,原始数组保持不变。
一维数组在转置之前和之后是相同的。
对于二维及以上数组,轴数保持不变,转置后形状发生变化。
例
>>import numpy as np描述:ndarray.real 返回数组的复数数据类型的实数部分。>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
>ar2.shape
>ar2t.NDIM 轴的数量保持不变。
>ar2t.形状形状变化,轴尺寸互换。
>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
>ar3.shape
>ar3t.NDIM 轴的数量保持不变。
>ar3t.形状形状变化,轴尺寸互换。
z=a+bj,z是复数,a是复数的实部,b是复数的虚部。
例
>>import numpy as np描述:ndarray.IMAG 返回数组复杂数据类型的虚部。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.])
例
>>import numpy as np描述:numpy.ndarray.flat 返回一个由数组的所有元素组成的一维迭代器。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.])
与内置的迭代器对象类似,它支持索引和遍历等操作。
例
>>import numpy as np描述:numpy.ndarray.CTYPES 返回一个对象,该对象简化了数组与 CTYPES 模块的交互。>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]
支持索引操作。
>ar1_flat[2]
获取长度。
>len(ar1_flat)
转换为列表
>list(ar1_flat)
>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]
numpy.ndarray.ctypes.data 返回数组的内存地址。
numpy.ndarray.ctypes.data as 返回一个数据指针,该指针指向对数组的引用。
ctypes.c_uint32*ar1.size).from_address(numpy.ndarray.ctypes.data) 创建与 NDAluS 地址相同的数组。
例
>>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
>cdata
data as 返回一个数据指针,该指针指向对数组的引用。
>cdata32=ar1_ctypes.data_as(ct.pointer(ct.c_uint32))
>cdata32
_main__.lp_c_ulong object at 0x000001fbfff26440>
将数据作为数据进行遍历。
>cdata32[i] for i in range(ar1.size)]
创建一个数组 b,共享 numpyndarray.ctype.数据地址
AR1 CTYPES 与 B 相互作用。
>b=(ct.c_uint32*ar1.size).from_address(cdata)
>b
_main__.c_ulong_array_6 object at 0x000001fbffecee40>
>b[:]
修改 ar1 的第一个元素。
>ar1[0][0]
>ar1[0][0]=21
>ar1[0][0]
>ar1
array([[21, 12, 13],[15, 16, 18]])
b 元素也被修改,因为它指向相同的地址
>b[:]
修改 b 的元素。
>b[1]=22
>b[:]
>ar1
array([[21, 22, 13],[15, 16, 18]])