Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以相反顺序访问numpy数组的python方法_Python_Numpy - Fatal编程技术网

以相反顺序访问numpy数组的python方法

以相反顺序访问numpy数组的python方法,python,numpy,Python,Numpy,我正在尝试重新编写一些代码,这些代码看起来像是由FORTRAN程序员编写的,以使其更具Pythonic/可读性。下面是感兴趣的代码片段。代码的总体行为是,只要值小于1,就将Z的前三个元素存储到Zstart中,只要值小于1,也将Z的最后三个值存储到Zend中 import numpy as np nbpoints = 3 Z = np.linspace(0,1.0,10) Zstart = np.ones(nbpoints) Zend = np.ones(nbpoints) Zpts = np.s

我正在尝试重新编写一些代码,这些代码看起来像是由FORTRAN程序员编写的,以使其更具Pythonic/可读性。下面是感兴趣的代码片段。代码的总体行为是,只要值小于1,就将Z的前三个元素存储到Zstart中,只要值小于1,也将Z的最后三个值存储到Zend中

import numpy as np
nbpoints = 3
Z = np.linspace(0,1.0,10)
Zstart = np.ones(nbpoints)
Zend = np.ones(nbpoints)
Zpts = np.size(Z)
for j in range(nbpoints):
    if Z[j] < Zstart[j]:
       Zstart[j] = Z[j]
    if Z[Zpts - 1 - j] < Zend[nbpoints - 1 - j]:
        Zend[nbpoints - 1 - j] = Z[Zpts - 1 - j]

我的解决方案让人觉得我仍然只是在重新编写写得不好的代码,例如在泰坦尼克号甲板上重新排列椅子。有没有更符合python的方法来执行此操作?

此代码在不移动计数器的情况下给出相同的结果

nbpoints = 3
Z=np.linspace(0,1.,10.)               
Zstart = np.ones(nbpoints)            
Zend = np.ones(nbpoints)              

Zstart[Z[:nbpoints] < 1] = Z[:nbpoints][Z[:nbpoints] < 1]  
Zend[Z[-nbpoints:] < 1] = Z[-nbpoints:][Z[-nbpoints:] < 1] 
nbpoints=3
Z=np.linspace(0,1,10.)
Zstart=np.ones(nbpoints)
Zend=np.ones(NB点)
Zstart[Z[:nbpoints]<1]=Z[:nbpoints][Z[:nbpoints]<1]
Zend[Z[-nbpoints:][1]=Z[-nbpoints:][Z[-nbpoints:][1]

您不需要用
np.one
实例化
Zstart
Zend
。只需直接构建它们:

nbpoints = 3
Z = np.linspace(0,1.0,10)
Zstart = Z[:nbpoints][Z[:nbpoints] < 1]
Zend = Z[-nbpoints:][Z[-nbpoints:] < 1]

print(Zstart)
print(Zend)
# [ 0.          0.11111111  0.22222222]    
# [ 0.77777778  0.88888889]
nbpoints=3
Z=np.linspace(0,1.0,10)
Zstart=Z[:nbpoints][Z[:nbpoints]<1]
Zend=Z[-nbpoints:][Z[-nbpoints:][1]
打印(Zstart)
打印(Zend)
# [ 0.          0.11111111  0.22222222]    
# [ 0.77777778  0.88888889]

请注意,
Zend
在这里只有2个元素,因为
Z
中的最后一个元素不小于1。

您能给出输入和所需输出的示例吗?@JulienSpronck I添加了示例输出。输入只是Z数组。从0到1变化的一维numpy数组。在实际的代码中,它是传入的,但出于这个代码段的目的,我只是使用numpy linspace函数来模拟输入数据。@wandadars如果起始值大于1会发生什么?您是否只在该代码段所来自的代码上下文中存储@BradSolomon,Z的值绑定在0和1之间。至于Zstart和Zend的初始值,只有原始作者知道他们为什么这样做。什么?如果Z中的值保证为0<值<1,那么为什么要测试它们
nbpoints = 3
Z=np.linspace(0,1.,10.)               
Zstart = np.ones(nbpoints)            
Zend = np.ones(nbpoints)              

Zstart[Z[:nbpoints] < 1] = Z[:nbpoints][Z[:nbpoints] < 1]  
Zend[Z[-nbpoints:] < 1] = Z[-nbpoints:][Z[-nbpoints:] < 1] 
nbpoints = 3
Z = np.linspace(0,1.0,10)
Zstart = Z[:nbpoints][Z[:nbpoints] < 1]
Zend = Z[-nbpoints:][Z[-nbpoints:] < 1]

print(Zstart)
print(Zend)
# [ 0.          0.11111111  0.22222222]    
# [ 0.77777778  0.88888889]