簡體   English   中英

ValueError:在 numpy 數組上設置具有序列的數組元素

[英]ValueError: setting an array element with a sequence on numpy array

這是大數組的一個簡單示例

   x = [[[1,2,3], "abs"], [[1,2,3], "abs"]]
   y = np.array(x)
   z = y[:, 0]
   z.astype('int') # This will throw an error

Output

z >> Out[9]: array([list([1, 2, 3]), list([1, 2, 3])], dtype=object)

有什么辦法可以將它從 object 轉換為 int 而無需對列表 x 進行迭代

我搜索了您的問題並遇到了: Using Numpy Vectorize on Functions that Return Vectors

所以我想你可以使用矢量化方法:

import numpy as np
x = [[[1,2,3], "abs"], [[1,2,3], "abs"]]
y = np.array(x)
z = y[:, 0]
def f(l):
    return np.array(l)

v = np.vectorize(f, signature='()->(n)')
k = v(z)

給出k為:

array([[1, 2, 3],
       [1, 2, 3]])

@hpaulj 還建議使用一種更簡潔的方法np.vstack(z) ,它給出了相同的答案。

根據文檔,vstack 的參數應該是“ndarrays 序列”,所以我認為傳遞列表序列並不完全正確,但我可以確認它確實有效。


最后,如果是我的代碼,我會堅持簡單的列表理解,這是最簡單的方法,任何解決方案都必須執行某種形式的 for 循環將列表轉換為 ndarray,所以為什么不只在 Python 中進行迭代。

>>> np.array([r[0] for r in x])
array([[1, 2, 3],
       [1, 2, 3]])

暫無
暫無

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

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