簡體   English   中英

更改無正方形 numpy ndarray 的 dtype

[英]Change dtype of none square numpy ndarray

a = np.array([1,2,3])
b = np.array([1,2,3,4])
c = np.array([a, b])

np.ndarrays內部有兩個不同大小的 np.ndarray,當我嘗試調用c.astype(np.int8)時,我會收到ValueError: setting an array element with a sequence. . 如何更改dtype的 dtype?

要在創建期間指定數組的類型,只需使用dtype=xxx 前任:

c = np.array([a,b], dtype=object)

如果要將類型從int64更改為int8 ,可以使用:

a.dtype = np.int8
b.dtype = np.int8

或者您可以復制ab

c = np.array(a, dtype=np.int8)
d = np.array(a, dtype=np.int8)

最后,如果您無權訪問ab ,而只能訪問c ,您可以在這里如何做同樣的事情:

for arr in c:
    arr.dtype = np.int8

也許你可以做這樣的事情:

arr = list()

for row in range(len(df.desired_column)):
  arr.append(np.array(df.desired_column.loc[row], dtype=np.int8))

arr = np.array(arr)

這樣, arr的每個元素都將是具有所需dtype的 numpy 數組。 在這個例子中, np.int8

假設arr是 dtype object 的 numpy 數組,其中包含 numpy ZA3CBC3F9D0CE2F2C1554E1B6,您可以:

arr8 = np.array([i.astype('int8') for i in arr])

演示:

arr = array([array([0]), array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3]),
...        array([0, 1, 2, 3, 4]), array([0, 1, 2, 3, 4, 5]),
...        array([0, 1, 2, 3, 4, 5, 6]), array([0, 1, 2, 3, 4, 5, 6, 7])],
...       dtype=object)
print(arr)

array([array([0]), array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3]),
       array([0, 1, 2, 3, 4]), array([0, 1, 2, 3, 4, 5]),
       array([0, 1, 2, 3, 4, 5, 6]), array([0, 1, 2, 3, 4, 5, 6, 7])],
      dtype=object)

print(np.array([i.astype('int8') for i in arr]))

array([array([0], dtype=int8), array([0, 1], dtype=int8),
       array([0, 1, 2], dtype=int8), array([0, 1, 2, 3], dtype=int8),
       array([0, 1, 2, 3, 4], dtype=int8),
       array([0, 1, 2, 3, 4, 5], dtype=int8),
       array([0, 1, 2, 3, 4, 5, 6], dtype=int8),
       array([0, 1, 2, 3, 4, 5, 6, 7], dtype=int8)], dtype=object)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM