我需要專門的 numpy 陣列。假設我有一個功能:
def gen_array(start, end, n_cols):
它的行為應該是這樣的,生成三列,每列從開始(包括)到結束(不包括):
>>> gen_array(20, 25, 3)
array([[20, 20, 20],
[21, 21, 21],
[22, 22, 22],
[23, 23, 23],
[24, 24, 24]])
我相當幼稚的實作如下所示:
def gen_array(start, end, n_columns):
a = np.arange(start, end).reshape(end-start, 1) # create a column vector from start to end
return np.dot(a, [np.ones(n_columns)]) # replicate across n_columns
(雖然不是必需的,但可以np.dot將值轉換為浮點數。)
我確信有更好、更有效和更 numpy-ish 的方式來完成同樣的事情。建議?
更新
根據@msi_gerva 的建議使用np.tile,我最新的最佳想法是:
def gen_array(start, end, n_cols):
return np.tile(np.arange(start, end).reshape(-1, 1), (1, n_cols))
...這對我來說似乎很好。
uj5u.com熱心網友回復:
除了numpy.arange和numpy.reshape,用于numpy.repeat擴展您的資料。
import numpy as np
def gen_array(start, end, n_cols):
return np.arange(start, end).repeat(n_cols).reshape(-1, n_cols)
print(gen_array(20, 25, 3))
# [[20 20 20]
# [21 21 21]
# [22 22 22]
# [23 23 23]
# [24 24 24]]
uj5u.com熱心網友回復:
我發現的最簡單的:
[:,None] 向陣列添加維度。
np.arange(start, end)[:,None]*np.ones(n_cols)
uj5u.com熱心網友回復:
np.arange(start, end)[:, np.newaxis].repeat(n_cols, axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530654.html
標籤:Python麻木的
