标签: numpy

如何在numpy中表示“:”

我想对多维 ndarray 进行切片,但不知道要在哪个维度上进行切片。假设我们有一个形状为 (6,7,8) 的 ndarray A。有时我需要在第一维 A[:,3,4] 上切片,有时在第三维 A[1,2,:] 上切片。

有没有代表“:”的符号?我想用它来生成索引数组。

index=np.zeros(3)
index[0]=np.:
index[1]=3
index[2]=4
A[index]
Run Code Online (Sandbox Code Playgroud)

python numpy

4
推荐指数
1
解决办法
364
查看次数

Python:使用 numpy 或 scipy 读取 Fortran 二进制文件

我正在尝试读取一个 fortran 文件,其标题为整数,然后实际数据为 32 位浮点数。使用 numpyfromfile('mydatafile', dtype=np.float32)它将整个文件读取为 float32,但我需要输出文件的标头位于 int32 中。使用 scipy 的 FortranFile 它读取标题:

f = FortranFile('mydatafile', 'r')
headers = f.read_ints(dtype=np.int32)
Run Code Online (Sandbox Code Playgroud)

但当我这样做时:

data = f.read_reals(dtype=np.float32)
Run Code Online (Sandbox Code Playgroud)

它返回一个空数组。我知道它不应该为空,因为使用 numpy 的 fromfile 它会读取所有数据。奇怪的是,scipy 方法适用于我的数据集中的其他文件,但不适用于这个。也许我不理解 numpy 和 scipy 的两种读取方法之间的区别。使用任一方法读取文件时,是否有办法隔离标头 ( dtype=np.int32) 和数据 ( )?dtype=np.float32

python numpy scipy

4
推荐指数
1
解决办法
5840
查看次数

如何完全重置警告

如何在不重新启动 python 的情况下再次看到警告。现在我只见到他们一次。

例如考虑以下代码:

import pandas as pd  
pd.Series([1]) / 0
Run Code Online (Sandbox Code Playgroud)

我明白了

RuntimeWarning: divide by zero encountered in true_divide 
Run Code Online (Sandbox Code Playgroud)

但当我再次运行它时,它会默默执行。

如何在不重新启动 python 的情况下再次看到警告?


我尝试过做

del __warningregistry__
Run Code Online (Sandbox Code Playgroud)

但这没有帮助。

似乎只存储了某些类型的警告。例如,如果我这样做:

def f():   
    X = pd.DataFrame(dict(a=[1,2,3],b=[4,5,6]))
    Y = X.iloc[:2]
    Y['c'] = 8
Run Code Online (Sandbox Code Playgroud)

那么这只会在第一次f()调用时发出警告。但是,现在什么时候del __warningregistry__我才能再次看到警告。


第一次警告和第二次警告有什么区别?为什么只有第二个存储在其中__warningregistry__?第一个存储在哪里?

python warnings numpy pandas

4
推荐指数
1
解决办法
2822
查看次数

将 math.ceil 应用于 python 中的数组

将 math.ceil 应用于整个数组的正确方法是什么?请参阅以下Python代码:

    index = np.zeros(len(any_array))
    index2 = [random.random() for x in xrange(len(any_array))
    ##indexfinal=math.ceil(index2)  <-?
Run Code Online (Sandbox Code Playgroud)

我想返回数组中每个元素的上限值。文档指出 math.ceil 返回任何输入 x 的上限,但是将此上限函数应用于数组中包含的每个元素的最佳方法是什么?

python arrays numpy ceil

4
推荐指数
1
解决办法
6658
查看次数

更改刻度标签而不影响绘图

我正在使用 matplotlib 在 python 中绘制二维数组,但在格式化刻度线时遇到问题。首先,我的数据目前被组织为带有(海拔、纬度)的二维数组。我正在绘制电子密度值作为高度和纬度的函数(基本上是特定时间的纵向切片)。

我想以 30 度为间隔标记从 -90 到 90 度的 x 轴,并使用另一个高程数组标记 y 值(每个模型运行都有不同的高程值,因此我无法手动分配任意高程)。我有一个带有纬度值的数组,另一个带有海拔值的数组都是一维数组。

这是我的代码:

from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt

#load the netcdf file into a variable
mar120="C:/Users/WillEvo/Desktop/sec_giptie_cpl_mar_120.nc"

#grab the data into a new variable
fh=Dataset(mar120,mode="r")

#assign model variable contents to python variables
lons=fh.variables['lon'][:]
lats=fh.variables['lat'][:]
var1=fh.variables['UN'][:]

#specifying which time and elevation to map
ionst=var1[0,:,:,21]
ionst=ionst[0:len(ionst)-1]

#close the netCDF file
fh.close()

#Set the figure, size, and resolution
plt.figure(figsize=(8,6), dpi=100, facecolor='white')
plt.subplot(1,1,1)

plt.imshow(ionst, …
Run Code Online (Sandbox Code Playgroud)

python numpy axes matplotlib multidimensional-array

4
推荐指数
1
解决办法
6024
查看次数

如何找到两个坐标矩阵之间最接近的对应向量?

我在Python中有以下问题需要解决:

给定两个坐标矩阵 (NumPy ndarrays) AB,查找中相应坐标向量a中的所有坐标向量,使得欧几里得距离最小。坐标矩阵和可以具有不同数量的坐标向量(即不同的行数)。AbB||a-b||AB

此方法应返回一个坐标向量矩阵,其中中的C第 i 个向量是与中的第 i 个坐标向量的欧几里德距离最小化的向量。cCBaA

例如,假设

A = np.array([[1,1], [3,4]])B = np.array([[1,2], [3,6], [8,1]])

向量[1,1]inA和向量 in之间的欧几里德距离B为:

1, 5.385165, 7
Run Code Online (Sandbox Code Playgroud)

所以第一个向量C[1,2]

[3,4]类似地,向量inA和向量 in的距离B为:

2.828427, 2, 5.830952  
Run Code Online (Sandbox Code Playgroud)

所以第二个也是最后一个向量C将是[3,6]

所以C = [[1,2], [3,6]]

如何在 Python 中高效地编写此代码?

python numpy vector euclidean-distance

4
推荐指数
1
解决办法
2583
查看次数

Python中隐式曲线的高阶局部插值

给定一组描述 2D 平面中某些轨迹的点,我想通过局部高阶插值提供该轨迹的平滑表示。

例如,假设我们在下图中定义了一个具有 11 个点的 2D 圆。我想按顺序在每对连续点之间添加点或产生平滑的轨迹。在每个线段上添加点很容易,但它会产生“局部线性插值”典型的斜率不连续性。当然这不是经典意义上的插值,因为

  • y对于给定的函数可以有多个值x
  • 只需在轨迹上添加更多点就可以了(不需要连续表示)。

所以我不确定什么是合适的词汇。

GPS轨迹

生成该图的代码可以在下面找到。使用该lin_refine_implicit函数执行线性插值。我正在寻找一个更高阶的解决方案来产生平滑的轨迹,我想知道是否有一种方法可以使用 Scipy 中的经典函数来实现它?我尝试使用各种一维插值,但scipy.interpolate没有取得太大成功(同样是因为y给定的多个值x)。

最终目标是使用这种方法通过离散测量提供平滑的 GPS 轨迹,所以我认为这应该在某个地方有一个经典的解决方案。

import numpy as np
import matplotlib.pyplot as plt

def lin_refine_implicit(x, n):
    """
    Given a 2D ndarray (npt, m) of npt coordinates in m dimension, insert 2**(n-1) additional points on each trajectory segment
    Returns an (npt*2**(n-1), m) ndarray
    """
    if n > 1:
        m = 0.5*(x[:-1] + x[1:])
        if x.ndim == 2:
            msize = …
Run Code Online (Sandbox Code Playgroud)

python gis interpolation numpy scipy

4
推荐指数
1
解决办法
3691
查看次数

如何在for循环中添加不同大小的numpy数组条目(类似于Matlab的元胞数组)?

我正在尝试在 python \ numpy 中实现对 Matlab 元胞数组的模拟。Matlab 代码如下:

for n=1:10
    C{n} = rand(1,n);
end
Run Code Online (Sandbox Code Playgroud)

请注意,每个单元格元素都有不同的长度。现在在 numpy 中:

for n in np.arange(10):
    C[n] = np.random.rand(1,n)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,我该怎么做才能实现这个?

python arrays matlab for-loop numpy

4
推荐指数
1
解决办法
850
查看次数

在 numpy 或 scipy 中找到实对称矩阵的实特征向量

我有一个具有很多简并特征值的实对称矩阵,我想找到该矩阵的实值特征向量。我正在努力寻找 numpy 或 scipy 中的一种方法来为我做到这一点,我尝试过的方法给出了复值特征向量。有谁知道这样的功能是否存在?

python numpy eigenvector

4
推荐指数
1
解决办法
8880
查看次数

在 python Scipy 中绘制连续三角形分布

如何从、和x的连续三角形分布中进行绘制并获取特定值的 CDF 。我不明白如何设置参数。我想要得到相当于在 中做的事情。 mode=0lower limit=-1upper limit=1numpyp.random.triangular(left=-1, mode=0, right=1)Scipy

我尝试了以下操作,但我不确定这是否是我所追求的。

scipy.stats.triang.cdf([-1,-0.5,0,0.5,1], c=0.5, loc=-1, scale=2)并获得:array([ 0, 0.125, 0.5, 0.875, 1.])这似乎是正确的。

我不明白为什么

scipy.stats.triang.expect(func=lambda x: x, c = 0.5, loc=0.5, scale=1)

正在产生错误消息

_argcheck() missing 1 required positional argument: 'c'

尽管c提供了论据。

python numpy scipy

4
推荐指数
1
解决办法
2490
查看次数