从numpy阵列PYTHON中移除头部和尾部

时间:2017-04-25 02:44:45

标签: python arrays numpy

我有一个numpy.ndarray,想要删除第一个h元素并持续t。

如我所见,更通用的方法是选择:

function doSth(fn) {

  var counter = 0;

  return function(){
    counter ++;
    if (counter >= 100) { // once per second
      counter = 0;
      fn();
    }
  }
}

,中间是[1,2,3,4]。这是正确的,但是当我不想删除任何东西时,我使用h = 0和t = 0,因为我试图删除任何东西,但这会返回空数组。我知道这是因为t = 0而且我也知道这个边界情况的if条件会用my_array [h:]解决它但我不想要这个解决方案(我的问题有点复杂,有更多的维度,代码会变得丑陋)

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

相反,请使用

middle = my_array[h:len(my_array)-t]

为了完整性,这是试运行:

my_array = [0,1,2,3,4,5]
h,t = 0,0
middle = my_array[h:len(my_array)-t]
print(middle)

Output: [0, 1, 2, 3, 4, 5]

此示例仅适用于标准数组。由于你的最终目标是使用numpy多维数组,这个问题实际上有点棘手。当您说要删除第一个h元素和最后t元素时,我们是否保证ht符合正确的可分性标准,以便结果将是一个结构良好的阵列?

我实际上认为最干净的解决方案只是使用这个解决方案,但首先要用适当的因素来划分。例如,在两个方面:

h = 3
t = 6
a = numpy.array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])

d = numpy.prod(numpy.shape(a)[1:])
mid_a = a[int(h/3):int(len(a)-t/3)]
print(mid_a)

Output: array([[4, 5, 6]])

我在索引中包含了int强制转换,因为即使分子均分分母,python 3也会自动将除法提升为float。

答案 1 :(得分:1)

$curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "http://test.dnb.avantimedns.se/drombolig/webservices/autoprospectservice.asmx?op=SaveAutoprospect", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{\n \"autoprospect\": \"{\\"SendAdditionalProspects\\":false,\\"RequestsEconomicalAdvice\\":false,\\"RequestsAssessment\\":false,\\"UserEmailsuccess\\":true,\\"ApprovesContact\\":true,\\"ObjectId\\":\\"90160211\\",\\"Source\\":\\"Company\\",\\"Name\\":\\"Test Testsson\\",\\"Email\\":\\"test@test.com\\",\\"ZipCode\\":\\"12345\\",\\"Phone\\":\\"1234567890\\",\\"Message\\":\\"Test\\"}\",\n \"apikey\": \"de2de92-5d8c-4dcc-8573-9354b96ba683\"\n \n}', CURLOPT_HTTPHEADER => array("content-type: application/json"), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } 可以替换为i:j个对象。和slice':j'等等:

slice(None,j)

这适用于列表和数组。对于多维数组,使用索引元组,可以包括切片对象

In [55]: alist = [0,1,2,3,4,5]
In [56]: h,t=1,-1; alist[slice(h,t)]
Out[56]: [1, 2, 3, 4]
In [57]: h,t=None,-1; alist[slice(h,t)]
Out[57]: [0, 1, 2, 3, 4]
In [58]: h,t=None,None; alist[slice(h,t)]
Out[58]: [0, 1, 2, 3, 4, 5]