天道酬勤,学无止境

numpy

Efficient way to delete elements in one numpy array from another

问题 从另一个numpy数组中删除元素的最佳方法是什么? 本质上,我在np.delete()之后,数组的顺序无关紧要。 import numpy as np a = np.array([2,1,3]) print a b = np.array([4,1,2,5,2,3]) b = np.delete(b, a) # doesn't work as desired print b # want [4,5,2] 对于大型数组,迭代a的元素非常慢。 回答1 这是一种使用sorting的方法 - def remove_first_match(a,b): sidx = b.argsort(kind='mergesort') unqb, idx = np.unique(b[sidx],return_index=1) return np.delete(b,sidx[idx[np.in1d(unqb,a)]]) 样品运行 - In [177]: a = np.array([2,1,3]) ...: b = np.array([4,1,2,5,2,3,2,3]) ...: In [178]: remove_first_match(a,b) Out[178]: array([4, 5, 2, 2, 3]) In [179]: a = np.array([2,2,1,3]) ...: b = np

2022-07-11 09:53:32    分类:技术分享    python   arrays   performance   numpy

Ignoring NaN in a dataframe

问题 回答1 import pandas as pd import numpy as np df = pd.DataFrame({'col1': np.random.randint(0, 10, 12)}) df.loc[2] = np.nan df.loc[5] = np.nan df['col1'].unique() ### output: array([ 4., 0., nan, 8., 1., 3., 2., 6.]) df['col1'].dropna().unique() ### output: array([ 4., 0., 8., 1., 3., 2., 6.])

2022-05-17 05:21:22    分类:技术分享    python   pandas   numpy   dataframe

replace values by the mean

问题 我有一个数据框如下: Col1 Price 1 Plastic 50 2 Metal 100 3 Plastic 40 我想用价格中的方法替换 Col1 中的值,所以我得到: Col1 Price 1 45 50 2 100 100 3 45 40 我已经做过: df.groupby('Col1').mean()['Price'] 但我不知道如何替换值,也许使用 map ? 回答1 df['Col1'] = df['Col1'].map(df.groupby('Col1')['Price'].mean()) df Col1 Price 1 45 50 2 100 100 3 45 40 回答2 df.assign(Col1=df.Col1.map(df.groupby('Col1').mean().squeeze())) Col1 Price 1 45 50 2 100 100 3 45 40 回答3 df['Col1']=df.groupby(['Col1'])['Price'].transform('mean') Col1 Price 0 45 50 1 100 100 2 45 40

2022-05-17 05:07:13    分类:技术分享    python   pandas   numpy   dataframe   pandas-groupby

Numpy, apply a list of functions along array dimension

问题 我有一个类型的函数列表: func_list = [lambda x: function1(input), lambda x: function2(input), lambda x: function3(input), lambda x: x] 和一个形状为 [4, 200, 200, 1] 的数组(一批图像)。 我想沿第 0 轴按顺序应用函数列表。 编辑:改写问题。 这相当于上面的。 说,而不是数组,我有一个由 4 个相同数组组成的元组,形状为 (200, 200, 1),我想在第一个元素上应用 function1,在第二个元素上应用 function2,等等。这可以做到吗?一个for循环? 回答1 您可以使用np.apply_along_axis遍历您的函数列表: import numpy as np x = np.ranom.randn(100, 100) for f in fun_list: x = np.apply_along_axis(f, 0, x) 基于OP的更新 假设您的函数和批次的大小相同: batch = ... # tuple of 4 images batch_out = tuple([np.apply_along_axis(f, 0, x) for f, x in zip(fun_list, batch)]) 回答2 我尝试了@Coldspeed

2022-05-17 04:57:04    分类:技术分享    python   arrays   function   numpy

merging multiple numpy arrays

问题 我有 3 个 numpy 数组,它们存储形状(4,100,100)的图像数据。 arr1= np.load(r'C:\Users\x\Desktop\py\output\a1.npy') arr2= np.load(r'C:\Users\x\Desktop\py\output\a2.npy') arr3= np.load(r'C:\Users\x\Desktop\py\output\a3.npy') 我想将所有 3 个数组合并为 1 个数组。 我试过这样: merg_arr = np.zeros((len(arr1)+len(arr2)+len(arr3), 4,100,100), dtype=input_img.dtype) 现在这制作了一个所需长度的数组,但我不知道如何复制这个数组中的所有数据。 可能正在使用循环? 回答1 这可以解决问题: merge_arr = np.concatenate([arr1, arr2, arr3], axis=0) np.stack 沿新维度排列数组。 它们的尺寸(第一个除外)需要匹配。 演示: arr1 = np.empty((60, 4, 10, 10)) arr2 = np.empty((14, 4, 10, 10)) arr3 = np.empty((6, 4, 10, 10)) merge_arr = np

2022-05-16 21:45:07    分类:技术分享    python   arrays   numpy

How to import multiple bands from an image into numpy?

问题 我是 python/numpy 的新手。 我需要将多波段图像中的n波段数据(~125)导入到n维数组中。 每个值都是一个 16 位有符号整数。 目前我有看起来像这样的python代码: stream = bytearray() mbImage = open(filename, mode='rb'); while curr <= filesize: mbImage.seek(curr) b = mbImage.read(samples * 2) stream += b curr += (2 * bands * samples) 如何将此代码转换为 numpy,以便我可以为每个频段执行此操作? 我尝试了以下方法,但不起作用(包括 gdal): npBandArr = np.array(inDs.GetRasterBand(10).ReadAsArray()) 回答1 GDAL 已经返回一个 Numpy 数组,因此不需要包装np.array 。 如果要读取数据集中的所有波段,可以跳过一次选择一个波段并使用: data = ds.ReadAsArray() 数组的第一个维度是波段(使用print(data.shape)检查)。 回答2 import gdal import numpy as np dataset= gdal.Open(r"AnnualCrop_1.tif")

2022-05-16 19:46:03    分类:技术分享    python   arrays   numpy   image-processing   gdal

delete specific rows from csv using pandas

问题 我有一个格式如下所示的 csv 文件: 我编写了以下代码来读取文件并随机删除转向值为 0 的行。我只想保留转向值为 0 的行的 10%。 df = pd.read_csv(filename, header=None, names = ["center", "left", "right", "steering", "throttle", 'break', 'speed']) df = df.drop(df.query('steering==0').sample(frac=0.90).index) 但是,我收到以下错误: df = df.drop(df.query('steering==0').sample(frac=0.90).index) locs = rs.choice(axis_length, size=n, replace=replace, p=weights) 文件“mtrand.pyx”,第 1104 行,在 mtrand.RandomState.choice (numpy/random/mtrand/mtrand.c:17062) ValueError: a 必须大于 0 你们能帮帮我吗? 回答1 使用@andrew_reece 的代码构建的示例 DataFrame In [9]: df Out[9]: center left right steering

2022-05-16 18:48:03    分类:技术分享    python-3.x   csv   pandas   numpy

The real difference between float32 and float64

问题 我想了解float16和float32在结果精度方面的实际差异。 例如, Numpy允许您选择所需数据类型的范围(np.float16, np.float32, np.float64) 。 我担心的是,如果我决定使用 float 16 来保留内存并避免可能的溢出,那么与 float32 相比,这是否会导致最终结果丢失? 谢谢 回答1 a = np.array([0.123456789121212,2,3], dtype=np.float16) print("16bit: ", a[0]) a = np.array([0.123456789121212,2,3], dtype=np.float32) print("32bit: ", a[0]) b = np.array([0.123456789121212121212,2,3], dtype=np.float64) print("64bit: ", b[0]) 回答2 float32 是一个 32 位数字 - float64 使用 64 位。 这意味着 float64 占用两倍的内存 - 在某些机器架构中对它们进行操作可能会慢很多。 但是,float64 可以比 32 位浮点数更准确地表示数字。 它们还允许存储更大的数字。 对于您的 Python-Numpy 项目,我确信您知道输入变量及其性质。 为了做出决定

2022-05-16 16:50:05    分类:技术分享    python   numpy   types

How to check a condition on each element of each row with numpy

问题 对于机器学习,我正在应用 Parzen Window 算法。 我有一个数组(m,n)。 我想检查每一行是否有任何值> 0.5,如果它们中的每一个都是,那么我将返回 0,否则返回 1。 我想知道是否有办法在没有循环的情况下做到这一点,这要归功于 numpy。 回答1 import numpy as np arr = np.array([[0.8, 0.9], [0.1, 0.6], [0.2, 0.3]]) print(np.all(arr>0.5, axis=1)) >> [True False False] 回答2 import numpy as np # Value Initialization a = np.array([0.75, 0.25, 0.50]) y_predict = np.zeros((1, a.shape[0])) #If the value is greater than 0.5, the value is 1; otherwise 0 y_predict = (a > 0.5).astype(float) 回答3 我有一个数组(m,n)。 我想检查每一行是否有任何值> 0.5 这将存储在b中: import numpy as np a = # some np.array of shape (m,n) b = np.any(a > 0.5, axis

2022-05-16 16:01:05    分类:技术分享    python   numpy

matplotlib unexpected results polar plot

问题 我正在尝试使用 matplotlib 绘制简单的函数 r = 3*sin(2*theta): import numpy as np import matplotlib.pyplot as plt theta = np.arange(0,2*np.pi,0.01) r = 3.0*np.sin(2.0*theta) ax = plt.subplot(111, projection='polar') ax.plot(theta, r) plt.show() 这是我得到的结果(不正确): 这是我期望看到的(wolfram alpha): 我错过了什么吗? 谢谢! 回答1 import numpy as np import matplotlib.pyplot as plt theta = np.arange(0,2*np.pi,0.01) r = 3.0*np.sin(2.0*theta) theta = theta + (1 - np.sign(r))*np.pi/2 # add pi to points with negative r values r = np.abs(r) # make all r values postive to fake out matplotlib ax = plt.subplot(111, projection='polar') ax.plot

2022-05-16 15:01:04    分类:技术分享    python   numpy   matplotlib