[英]Increase the columns of numpy 2D array
我有一個使用numpy和一個名為PyProj的外部程序包的玩具示例。 緯度和經度是包含某些領域特定信息的坐標的2D數組。 我想做的是計算一個球體到我任意選擇的中心點的距離。 lat_0和lon_0的形狀是
(2000,1)
但是API調用inv不喜歡那樣。 我收到運行時錯誤-
RuntimeError: Buffer lengths not the same
它想要一個形狀的數組
(2000,50).
因此,我希望lat_0和lon_0與lon和lat的形狀相同,並具有所有恆定值,即中心緯度和經度。 什么是增加lon_0和lat_0的列並用中心值填充以使其與lon和lat相同的形狀而不使用for循環的最有效方法?
import numpy as np
from pyproj import Geod
lat = np.empty((2000,50))
lat.fill(1)
lon = np.empty((2000,50))
lon.fill(1)
center = int(np.floor(len(lon[-1]) / 2.))
lon_0 = lon[:,center][...,np.newaxis]
lat_0 = lat[:,center][...,np.newaxis]
g = Geod(ellps='WGS84')
distance = g.inv(lon,lat,lon_0,lat_0,radians=True)
最有效的方法可能是np.broadcast_arrays
。 這將創建較小數組的視圖,而不會擴大數據緩沖區。 通用示例:
>>> A = np.arange(10).reshape(2, 5)
>>> A
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
>>> B = np.c_[:2]
>>> B
array([[0],
[1]])
>>> C = np.arange(5)
>>> D = 7
>>> np.broadcast_arrays(A, B)
[array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]), array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1]])]
>>> np.broadcast_arrays(A, C)
[array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]), array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])]
>>> np.broadcast_arrays(A, D)
[array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]), array([[7, 7, 7, 7, 7],
[7, 7, 7, 7, 7]])]
要查看數據是否共享:
>>> AA, BB = np.broadcast_arrays(A, B)
>>> BB
array([[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1]])
>>> BB[0,0] = 3
>>> BB
array([[3, 3, 3, 3, 3],
[1, 1, 1, 1, 1]])
>>> B
array([[3],
[1]])
不是100%肯定我了解您的需求,我的建議似乎不夠,但是要沿着指定的軸多次復制數組,可以使用numpy repeat
所以你可以
lon_0 = np.repeat(lon_0, 50, axis=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.