![](/img/trans.png)
[英]Python numpy ValueError: setting an array element with a sequence
[英]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.