文章目录
Numpy中的常用操作
- Numpy数据类型, 数据类型转换
- ndarray与list之间的相互转换
- list 转 numpy
np.asarray(a) 或 np.array(a) - ndarray 转 list
a.tolist()
- list 转 numpy
- xxx
np.logical_and(y>=0, y<=5)
- 生成随机的整数索引
# 方式一
tmp_a = np.arange(10)
np.random.shuffle(tmp_a)
tmp_a
Out[16]: array([4, 0, 8, 1, 6, 7, 3, 9, 5, 2])
# 方式二
np.random.permutation(range(10))
Out[17]: array([9, 3, 7, 6, 5, 4, 1, 8, 0, 2])
- np.linspace()
tmp_a = np.linspace(50, 95,int(np.round((0.95 - .5) / .05)) + 1, endpoint=True) / 100
Out[13]: array([0.5 , 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95])
# 奇怪的是tmp_b中得到的tmp_b[8]并不等于0.9
tmp_b = np.linspace(.5, 0.95,int(np.round((0.95 - .5) / .05)) + 1, endpoint=True)
Out[14]: array([0.5 , 0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95])
tmp_a - tmp_b
Out[26]:
array([0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
1.11022302e-16, 0.00000000e+00])
np.where(.8 == tmp_a)[0], np.where(.9 == tmp_a)[0]
Out[27]: (array([6]), array([8]))
np.where(.8 == tmp_b)[0], np.where(.9 == tmp_b)[0]
Out[28]: (array([6]), array([], dtype=int64))
- 数组铺平
将一个多维的数组拉伸展开,有两种铺平方式:以行为优先展开,以列为优先展开。import numpy as np array2 = np.arange(25).reshape((5, 5)) # 行展开 array3 = array2.ravel() array4 = array2.flatten() print(array3) print(array4) # 结果: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24] # 列展开 array5 = array2.flatten('F') print(array5) # 结果: [ 0 5 10 15 20 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24]
- Numpy中的排序(sort,argsort)_呆码-CSDN博客 20180205
- np.roll()的理解和用法_Sincky的博客-CSDN博客 20181030
- Numpy系列(五)给数组增加一个维度_小小何先生的学习之旅-CSDN博客 20200816
numpy.random.RandomState(seed=None)
RandomState
和Generator
类中有多种方法,可用于从各种概率分布中生成随机数。类中的每个方法除了包含有特定于分布的参数外,还都包含有1个关键字参数size
,其默认值为None;如果size为None,则生成并返回单个值;如果size为整数(integer),则返回1个填充有生成值的一维数组;如果size为元组(tuple),则返回1个填充有生成值并具有该形状的多维数组。
Compatibility Guarantee: A fixed bit generator using a fixed seed and a fixed series of calls to ‘RandomState’ methods using the same parameters will always produce the same results up to roundoff error except when the values were incorrect.
class numpy.random.RandomState(seed=None)
的应用场景:
import numpy as np
SEED = 23455 # 设置seed值,生成ndarray对象
# rdm = np.random.RandomState(SEED) # 基于seed产生随机数; 这两个语句等价
rdm = np.random.mtrand.RandomState(SEED) # 基于seed产生随机数; 这两个语句等价
X = rdm.rand(32, 2) # rand函数产生随机数, 返回shape大小为(32,2)的随机数组, 取值在0~1之间
print("X:\n",X)
Legacy Random Generation — NumPy v1.19 Manual
NEP 19 — Random Number Generator Policy — NumPy Enhancement Proposals
numpy中的np.random.mtrand.RandomState_weixin_30725467的博客20181028
【数据处理】Numpy.random.seed()的用法_白糖炒栗子 20180602
【数据处理】numpy.random.RandomState的用法_白糖炒栗子 20180602
数组的获取
获取数组是通过索引 (indexing) 和切片 (slicing) 来完成的,
- 切片是获取一段特定位置的元素
- 索引是获取一个特定位置的元素
- 切片得到的是原数组的一个视图 (view),通过赋值给另一个变量来 修改切片中的内容会改变原数组;
- 索引得到的是原数组的一个复制 (copy),通过赋值给另一个变量来 修改索引中的内容不会改变原数组;
- 但直接对原数组的切片/索引数据赋值,会改变原数组;
temp = np.arange(5)
index_1 = temp[2] # 2
index_1 = 10
temp # array([0, 1, 2, 3, 4])
slice_1 = temp[3:4] # array([3])
slice_1[0] = 100
temp # array([0, 1, 2, 100, 4])
slice_2 = temp[3:4] # array([100])
slice_2 = 1000
temp # array([0, 1, 2, 100, 4])
——————分割线——————
temp = np.arange(5)
temp[0] = 10
temp # array([10, 1, 2, 3, 4])
temp[2:3] = 100
temp # array([10, 1, 100, 3, 4])
正规索引
numpy取数组中的行和列_qq_44812523的博客-CSDN博客 20200710
a = torch.arange(60).reshape((5, 3, 4))
print(a[2:4].size())
print(a[2:4][0:2].size())
print(a[2:4][0:2][0].size())
print(a[2:4, 0:2].size())
print(a[2:4, 0:2, 0].size())
print(a[2:4, 0:2, 0])
a[2:4, 0:2, 0] = -1
b = a.clone()
print('b的值:', '\n', b)
Numpy中打印数值输出时的格式控制
Python编程:如何规范numpy中数组元素的打印输出格式 - 云+社区 - 腾讯云 20190420
Numpy线性代数
numpy.log()和math.log()
numpy.log()和math.log()都可以进行对数运算。
但math.log()只能对单个数值 (scalar) 进行运算,如果对数组运算则会报错:TypeError: only size-1 arrays can be converted to Python scalars;
而numpy.log()则可以对数组进行运算。
因此,建议用numpy.log(),少用math.log()。
numpy.arctan()和numpy.arctan2()
Numpy中arctan和arctan2的区别_SH_13的博客-CSDN博客 20200427
SciPy使用之求函数的导数
alpha = Symbol('alpha') # 或者使用alpha = symbols('alpha')
x = Symbol('x') # 或者使用x = symbols('x')
# 或者使用alpha, x = symbols('alpha, x')
# diff_pos_fl = diff(- alpha * (x ** 2) * log(x), x) # 关于x的偏导函数, 包含alpha参数
# diff_pos_fl = diff(- alpha * (x ** 2) * log(x), x).subs(alpha, 1.0) # 关于x的偏导函数, 在alpha参数等于1.0时
diff_pos_fl = diff(- alpha * (x ** 2) * log(x), x).subs(alpha, 1.0).subs(x, 0.3) # 在x=0.3处的偏导数, 在alpha参数等于1.0时
print(diff_pos_fl)
np.save()
问题记录
问题描述:
开始
原因分析:
开始
解决方案:
开始
将ndarray数值保存到.txt中时报错TypeError: can only concatenate str (not "numpy.float32") to str
问题描述:
import numpy as np
tmp_a = np.arange(5).astype(np.float32)
for i in range(len(tmp_a)):
with open('./tmp_data_saved.txt', 'a') as f:
f.write(f'tmp_a{i}\t' + tmp_a[i] + '\n')
print('\nfinish!')
# 原始代码 f.write(f'tmp_a{i}\t' + tmp_a[i] + '\n') 会报以下错误:
Traceback (most recent call last):
File "d:/WorkSpace/Pytorch_WorkSpace/PythonTest/test_002.py", line 11, in <module>
f.write(f'tmp_a{i}\t' + tmp_a[i] + '\n')
TypeError: can only concatenate str (not "numpy.float32") to str
原因分析and解决方案:
tmp_a[i]的数据类型是numpy.float32,无法直接保存到.txt中;解决方案是利用str()函数将其转换为str类型后再保存;
import numpy as np
tmp_a = np.arange(5).astype(np.float32)
for i in range(len(tmp_a)):
with open('./tmp_data_saved.txt', 'a') as f:
f.write(f'tmp_a{i}\t' + str(tmp_a[i]) + '\n')
print('\nfinish!')
# tmp_data_saved.txt中的内容如下:
tmp_a0 0.0
tmp_a1 1.0
tmp_a2 2.0
tmp_a3 3.0
tmp_a4 4.0
TODO:浮点数显示为xxx.999…999或xxx.000…000
20210916记:
- Losing My Precision: Tips For Handling Tricky Floating Point Arithmetic | SOA 201404
- how set numpy floating point accuracy? - Stack Overflow 20140807
- numpy.around — NumPy v1.21 Manual
ImportError: numpy.core.multiarray failed to import
问题描述:
20230413记:ImportError: numpy.core.multiarray failed to import
原因分析and解决方案:
- python - ImportError: numpy.core.multiarray failed to import - Stack Overflow 20220902
- 解决:ImportError: numpy.core.multiarray failed to import_pika虫的博客-CSDN博客 20180817
AttributeError: module ‘numpy’ has no attribute ‘MachAr’
问题描述:
20230413记:AttributeError: module 'numpy' has no attribute 'MachAr'
原因分析and解决方案:
I had this issue while running import statsmodels.api as sm
. The issue was happening with numpy==1.24.2
. Downgrading it to 1.23
solved the issue for me. I have not tested newer versions tbh, so another one might work as well.
待补充