小编chw*_*w21的帖子

numpy interp减少xp

我想插入一个numpy数组,而np.interp几乎完全符合我的要求:

interp(x, xp, fp, left=None, right=None)
One-dimensional linear interpolation.
Run Code Online (Sandbox Code Playgroud)

除了这个位:

不检查x坐标序列xp是否正在增加.如果xp没有增加,结果是无稽之谈.

我的xp正在下降,所以哪个更好:反转xp和fp的方向:

np.interp(x, xp[::-1], fp[::-1])
Run Code Online (Sandbox Code Playgroud)

或反转x和xp:

np.interp(-x, -xp, fp)
Run Code Online (Sandbox Code Playgroud)

还是有更好的方法?

python interpolation numpy

7
推荐指数
1
解决办法
3172
查看次数

沿轴插入numpy.ndarray的最佳方法

我有一个4维数据,比如说温度numpy.ndarray.阵列的形状是(ntime, nheight_in, nlat, nlon).

我为每个维度都有相应的一维数组,告诉我某个值对应的时间,高度,纬度和经度,对于这个例子,我需要height_in给出以米为单位的高度.

现在我需要将它带到不同的高度尺寸height_out,具有不同的长度.

以下似乎做我想要的:

ntime, nheight_in, nlat, nlon = t_in.shape

nheight_out = len(height_out)
t_out = np.empty((ntime, nheight_out, nlat, nlon))

for time in range(ntime):
    for lat in range(nlat):
        for lon in range(nlon):
            t_out[time, :, lat, lon] = np.interp(
                height_out, height_in, t[time, :, lat, lon]
            )
Run Code Online (Sandbox Code Playgroud)

但是有3个嵌套循环,以及python和numpy之间的大量切换,我不认为这是最好的方法.

关于如何改进这个的任何建议?谢谢

python arrays optimization interpolation numpy

7
推荐指数
2
解决办法
7969
查看次数

有什么理由只传递第一个元素而不是整个数组?

好的,昨天我有一位同事来到我的办公室,问我一个关于他必须使用的 Fortran 代码的问题。

基本上,他使用的代码有一个长的多维数组,以及一个需要这个长的多维数组作为参数的子例程。

但是,调用该子例程的代码仅传递数组的第一个元素。但代码仍然有效。所以他问我怎么会这样。

我还没有看到他的特定代码,但这里有一个我如何理解这个问题的例子(并且它有效!):

subroutine print_array(a)
    implicit none
    integer :: a(10)
    write(*, *) a
end subroutine print_array

program passing
    implicit none
    integer :: i(10)
    i = (/ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 /)
    call print_array(i(1))
end program passing
Run Code Online (Sandbox Code Playgroud)

所以我告诉他,Fortran 按顺序存储数组,数组的位置与第一个元素相同,并且由于子例程需要特定的形状,因此它知道沿着这个序列读取多远,依此类推。

我还告诉他这是不好的编程习惯,他不应该自己编写这种代码。

但从那时起我一直在想:为什么写这篇文章的人首先要这样做?有理由这样做吗?(这甚至不必是一个很好的理由。)

或者我是对的,这只是愚蠢而且太容易出错?

arrays fortran

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

如何仅使用一个索引遍历数组?

我在F90中有类似的代码:

real(8), dimension(10,10,10) :: A

do i = 1, 1000

print*,A(i,1,1)

enddo
Run Code Online (Sandbox Code Playgroud)

我很惊讶这个工作,它比简单地循环3个维度更快i,j,k.

有人可以解释为什么这有效吗?

fortran

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

标签 统计

arrays ×2

fortran ×2

interpolation ×2

numpy ×2

python ×2

optimization ×1