當我執行這個 python 代碼時,我收到一條錯誤訊息:ValueError: setting an array element with a sequence。
有什么問題?你可以幫幫我嗎?
a=np.array([1,3,5,7,9], dtype=int)
c=np.array([3,4,7,8,9], dtype=int)
b=np.zeros(len(a))
for i in range(len(a)):
b[i]= np.where(a == int(c[i]))
uj5u.com熱心網友回復:
問題在于b[i]= np.where(a == int(c[i]))這會回傳一個僅包含示例中單個元素的陣列。但是, v 也是一維的,您必須分配標量而不是陣列。如果您確定搜索只回傳 1 個元素,您可以這樣做b[i]= np.where(a == int(c[i]))[0]
uj5u.com熱心網友回復:
您也許可以嘗試將其附加到 b 而不是替換值?
B.append(np.where( a == c[i]))
還可以嘗試在 for 回圈中使用 if 條件:)
uj5u.com熱心網友回復:
問題出在你的陣列b上。由于是陣列,所以不如串列靈活。由于您的np.where陳述句有時會回傳一個空陣列,甚至可能回傳一個包含更多標量的陣列,所以它有點問題。您最好將其定義b為串列:
a=np.array([1,3,5,7,9], dtype=int)
c=np.array([3,4,7,8,9], dtype=int)
b=[]
for i in range(len(a)):
b.append(np.where(a==c[i])[0])
print(b)
[array([1]),
array([], dtype=int64),
array([3]),
array([], dtype=int64),
array([4])]
只有當您完全確定您的np.where陳述句將回傳一個且只有一個標量時,您才能使用@Simon Hawe 的解決方案。
請注意,這將回傳a陳述句為 True 的位置的索引!如果您想要值本身,則代碼變為
a=np.array([1,3,5,7,9], dtype=int)
c=np.array([3,4,7,8,9], dtype=int)
b=[]
for i in range(len(a)):
b.append(a[np.where(a==c[i])])
print(b)
[array([3]),
array([], dtype=int64),
array([7]),
array([], dtype=int64),
array([9])]
uj5u.com熱心網友回復:
我應該投票關閉它,因為您沒有提供足夠的除錯資訊,尤其是沒有提供完整的traceback。
但是讓我們看看你在做什么。在第一次迭代中:
In [342]: a==c[0]
Out[342]: array([False, True, False, False, False])
In [343]: np.where(a==c[0])
Out[343]: (array([1]),)
注意where產生了什么。這是一個元組,而不是一個數字(即使它只在 上找到True)。如果不清楚,請閱讀檔案。
當我們嘗試將該值分配給b陣列的一個元素(具有floatdtype)時:
In [344]: b[0] = np.where(a==c[0])
TypeError: float() argument must be a string or a number, not 'tuple'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<ipython-input-344-b205dc5b1048>", line 1, in <module>
b[0] = np.where(a==c[0])
ValueError: setting an array element with a sequence.
你收到完整的資訊了嗎?如果是這樣,你為什么只參考最后一行?
雖然可以[1]從where元組中提取它,但對于其他迭代,結果可能為空 - 不匹配!
In [346]: np.where(a==c[1])
Out[346]: (array([], dtype=int64),)
In [347]: np.where(a==c[2])
Out[347]: (array([3]),)
In [348]: np.where(a==c[3])
Out[348]: (array([], dtype=int64),)
可以將這些結果收集到where一個串列中,但為什么呢?
In [349]: [np.nonzero(a==c[i])[0] for i in range(5)]
Out[349]:
[array([1]),
array([], dtype=int64),
array([3]),
array([], dtype=int64),
array([4])]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/420313.html
標籤:
上一篇:檢查熊貓中迭代和的最大值
下一篇:Numpy線與圓相交
