numpy信息
import numpy as np
# # 查看版本号
print(np.__version__)
# 查看配置
np.show_config()
2.2.6
Build Dependencies:
blas:
detection method: pkgconfig
found: true
include directory: C:/Users/runneradmin/AppData/Local/Temp/cibw-run-7xf_vzet/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas64/include
lib directory: C:/Users/runneradmin/AppData/Local/Temp/cibw-run-7xf_vzet/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas64/lib
name: scipy-openblas
openblas configuration: OpenBLAS 0.3.29 USE64BITINT DYNAMIC_ARCH NO_AFFINITY
Haswell MAX_THREADS=24
pc file directory: C:/a/numpy/numpy/.openblas
version: 0.3.29
lapack:
detection method: pkgconfig
found: true
include directory: C:/Users/runneradmin/AppData/Local/Temp/cibw-run-7xf_vzet/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas64/include
lib directory: C:/Users/runneradmin/AppData/Local/Temp/cibw-run-7xf_vzet/cp310-win_amd64/build/venv/Lib/site-packages/scipy_openblas64/lib
name: scipy-openblas
openblas configuration: OpenBLAS 0.3.29 USE64BITINT DYNAMIC_ARCH NO_AFFINITY
Haswell MAX_THREADS=24
pc file directory: C:/a/numpy/numpy/.openblas
version: 0.3.29
Compilers:
c:
commands: cl
linker: link
name: msvc
version: 19.29.30159
c++:
commands: cl
linker: link
name: msvc
version: 19.29.30159
cython:
commands: cython
linker: cython
name: cython
version: 3.1.0
Machine Information:
build:
cpu: x86_64
endian: little
family: x86_64
system: windows
host:
cpu: x86_64
endian: little
family: x86_64
system: windows
Python Information:
path: C:\Users\runneradmin\AppData\Local\Temp\build-env-r6iiznem\Scripts\python.exe
version: '3.10'
SIMD Extensions:
baseline:
- SSE
- SSE2
- SSE3
found:
- SSSE3
- SSE41
- POPCNT
- SSE42
- AVX
- F16C
- FMA3
- AVX2
not found:
- AVX512F
- AVX512CD
- AVX512_SKX
- AVX512_CLX
- AVX512_CNL
- AVX512_ICL
numpy.array
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度
# 1维数组
list01 = [1,2,3]
a = np.array([1,2,3])
b = np.array(list01)
a,b
(array([1, 2, 3]), array([1, 2, 3]))
# 元祖
tup01 =(1,2,3)
a = np.array((1,2,3))
b = np.array(tup01)
a,b
(array([1, 2, 3]), array([1, 2, 3]))
#嵌套
my_arr = np.array( [[1,2,3],[4,5,6]] )
print(type(my_arr))
print(my_arr)
<class 'numpy.ndarray'>
[[1 2 3]
[4 5 6]]
# dtype = complex 创建虚数 数组
a = np.array([1, 2, 3], dtype = complex)
a
array([1.+0.j, 2.+0.j, 3.+0.j])
dtype设置数组中数字的类型
- bool_ 布尔型数据类型(True 或者 False)
- int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
- intc 与 C 的 int 类型一样,一般是 int32 或 int 64
- intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
- int8 字节(-128 to 127)
- int16 整数(-32768 to 32767)
- int32 整数(-2147483648 to 2147483647)
- int64 整数(-9223372036854775808 to 9223372036854775807)
- uint8 无符号整数(0 to 255)
- uint16 无符号整数(0 to 65535)
- uint32 无符号整数(0 to 4294967295)
- uint64 无符号整数(0 to 18446744073709551615)
- float_ float64 类型的简写
- float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
- float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
- float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
- complex_ complex128 类型的简写,即 128 位复数
- complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
- complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)
* - int8, int16, int32, int64 四种数据类型可以使用字符串 ‘i1’, ‘i2’,‘i4’,‘i8’ 代替
a = np.array([[1, 2], [3, 4]],dtype=np.int8)
b = type(a)
a,b
(array([[1, 2],
[3, 4]], dtype=int8),
numpy.ndarray)
x = np.array([[1, 2], [3, 4]],dtype=np.float64)
x
array([[1., 2.],
[3., 4.]])
# np.astype(): 转换数组的数据类型
vec_1 = np.array(['1','2','3'])
vec_2 = vec_1.astype('float')
print("转换前的类型:",vec_1.dtype)
print(vec_1)
print("转换后的类型:",vec_2.dtype)
print(vec_2)
转换前的类型: <U1
['1' '2' '3']
转换后的类型: float64
[1. 2. 3.]
ndmin
作用
-
指定输出数组最少有多少维。
-
如果输入数据维度 < ndmin:在 shape 最前面补若干个长度为 1 的维度,把维度抬高到ndmin;
-
如果输入数据维度 ≥ ndmin:数组保持原样,不做修改。
-
默认值:ndmin=0
# 输入标量 10
a0 = np.array(10, ndmin=0)
a1 = np.array(10, ndmin=1)
a2 = np.array(10, ndmin=2)
a3 = np.array(10, ndmin=3)
print("ndmin=0:", a0.shape) # () 0维(标量)
print("ndmin=1:", a1.shape) # (1,) 1维
print("ndmin=2:", a2.shape) # (1,1) 2维
print("ndmin=3:", a3.shape) # (1,1,1) 3维
ndmin=0: ()
ndmin=1: (1,)
ndmin=2: (1, 1)
ndmin=3: (1, 1, 1)
# 示例 2:一维列表
arr1 = np.array([1,2,3], ndmin=2)
print(arr1)
print("shape:", arr1.shape) # (1, 3) 前面补1
[[1 2 3]]
shape: (1, 3)
# 示例 3:输入维度已经大于 ndmin,不会变化
# 输入本身是2维数组,ndmin=1 < 2,不变化
arr2 = np.array([[1,2],[3,4]], ndmin=1)
print(arr2.shape) # (2, 2)
(2, 2)
order:内存存储顺序
- ‘C’ C 顺序(行优先):内存按行存放,一行行往内存写。numpy 默认。
- ‘F’ Fortran 顺序(列优先):内存按列存放,一列列往内存写。
- 只是改变元素在内存里面怎么排,肉眼打印看不出区别,体现在 .flags、ravel()、reshape()、性能上。
*
data = [[1,2],
[3,4]]
ac = np.array(data, order='C')
af = np.array(data, order='F')
# C_CONTIGUOUS=True:内存行优先连续存储(C 顺序)
# F_CONTIGUOUS=True:内存列优先连续存储(Fortran 顺序)
print("=== order='C'数组 ===")
print(ac)
print("C连续?", ac.flags)
print("F连续?", ac.flags)
print("\n=== order='F'数组 ===")
print(af)
print("C连续?", ac.flags)
print("F连续?", ac.flags)
print("C顺序展平:", ac.flatten(order='C')) # [1 2 3 4] 按行展平
print("F顺序展平:", af.flatten(order='F')) # [1 3 2 4] 按列展平
=== order='C'数组 ===
[[1 2]
[3 4]]
C连续? C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
F连续? C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
=== order='F'数组 ===
[[1 2]
[3 4]]
C连续? C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
F连续? C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
WRITEABLE : True
ALIGNED : True
WRITEBACKIFCOPY : False
C顺序展平: [1 2 3 4]
F顺序展平: [1 3 2 4]
subok 参数详解
- subok=False(默认):永远返回原生 numpy.ndarray,子类实例会被强制转为普通 ndarray
- subok=True:如果输入是 ndarray 的子类,则保留子类类型,返回子类对象,而不是强制变回基础 ndarray
- 日常写普通数据分析几乎用不到 subok;只有你自己继承 ndarray 自定义数组类的时候才会用到。
import numpy as np
# 自定义数组类,继承 np.ndarray
class MyArray(np.ndarray):
pass
# 创建 MyArray 子类实例
my_arr = np.array([1,2,3]).view(MyArray)
print(type(my_arr))
# <class '__main__.MyArray'>
<class '__main__.MyArray'>
# subok=False 默认情况(丢弃子类,返回普通 ndarray)
a1 = np.array(my_arr, subok=False)
print(type(a1))
# <class 'numpy.ndarray'>
# ✨子类 MyArray 丢失,强制变回基础 ndarray
<class 'numpy.ndarray'>
# subok=True:保留子类类型
a2 = np.array(my_arr, subok=True)
print(type(a2))
# <class '__main__.MyArray'>
# ✨保留原来的 MyArray 子类
<class '__main__.MyArray'>
1760



被折叠的 条评论
为什么被折叠?



