我有我的 numpy 物件:
[array([1, 1, 1]) array([2, 2, 2])
array([3, 3, 3]) array([4, 4, 4])
array([5, 5, 5]) array([6, 6, 6])]
我的目標是獲取所有子陣列中的平均值串列/陣列,即獲取串列 [1 2 3 4 5 6]。
我得到了 np.mean 和 np.average: [3.5 3.5 3.5] 這是所有第一、所有第二、所有第三元素的平均值。
我嘗試添加一個引數axis=1,但隨后出現錯誤:
avg = a.mean(axis)
File "---/numpy/core/_methods.py", line 138, in _mean
rcount = _count_reduce_items(arr, axis)
File "---/numpy/core/_methods.py", line 57, in _count_reduce_items
items *= arr.shape[ax]
IndexError: tuple index out of range
我嘗試將我的物件投射到 np.array 但這沒有任何區別。
正如我所評論的,這是我的問題的最小重現:
import numpy as np
A = np.zeros((2,2), dtype=object)
A[0][0] = np.append(A[0][0], np.array([1]))
A[0][1] = np.append(A[0][1], np.array([2]))
print(np.array(A[0,:]).mean()) # ok
print(np.array(A[0,:]).mean(axis=0)) # ok
np.array(A[0,:]).mean(axis=1) # bad
uj5u.com熱心網友回復:
我想你想寫a.mean(axis=axis)。完整的解決方案:
代碼
from numpy import array
a = array(
[
array([1, 1, 1]),
array([2, 2, 2]),
array([3, 3, 3]),
array([4, 4, 4]),
array([5, 5, 5]),
array([6, 6, 6]),
]
)
axis = 1
print(a.mean(axis=axis))
輸出
[1. 2. 3. 4. 5. 6.]
uj5u.com熱心網友回復:
>>> obj = [np.array([1, 1, 1]), np.array([2, 2, 2]), np.array([3, 3, 3]), np.array([4, 4, 4]), np.array([5, 5, 5]), np.array([6, 6, 6])]
>>> np.array(obj).mean(axis=1).tolist()
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
把它作為整數
>>> np.array(obj).mean(axis=1, dtype=np.int32).tolist()
[1, 2, 3, 4, 5, 6]
在你的情況下,
import numpy as np
A = np.zeros((2,2), dtype=object)
A[0] = np.array([1])
A[1] = np.array([2])
A.mean(axis=1).tolist()
輸出:[1.0, 2.0]
uj5u.com熱心網友回復:
從原始顯示創建一個陣列 - 通過一些調整,生成一個 2d 陣列:
In [23]: array=np.array
...: alist = [array([1, 1, 1]), array([2, 2, 2]),
...: array([3, 3, 3]), array([4, 4, 4]),
...: array([5, 5, 5]), array([6, 6, 6])]
In [24]: alist
Out[24]:
[array([1, 1, 1]),
array([2, 2, 2]),
array([3, 3, 3]),
array([4, 4, 4]),
array([5, 5, 5]),
array([6, 6, 6])]
In [25]: np.array(alist)
Out[25]:
array([[1, 1, 1],
[2, 2, 2],
[3, 3, 3],
[4, 4, 4],
[5, 5, 5],
[6, 6, 6]])
In [26]: np.array(alist).mean(axis=1)
Out[26]: array([1., 2., 3., 4., 5., 6.])
從該串列制作一個 6 元素物件 dtype 陣列
In [29]: A = np.zeros((6),object)
In [30]: A[:]=alist
In [31]: A
Out[31]:
array([array([1, 1, 1]), array([2, 2, 2]), array([3, 3, 3]),
array([4, 4, 4]), array([5, 5, 5]), array([6, 6, 6])], dtype=object)
In [32]: A.shape
Out[32]: (6,)
In [33]: A.mean()
Out[33]: array([3, 3, 3])
In [35]: A.sum()
Out[35]: array([21, 21, 21])
什么mean正在做的是將所述6個陣列一起以獲得[35],然后通過除以6來獲得平均值(截斷為INT)。
要獲得單個陣列的平均值,請使用串列推導式:
In [36]: [a.mean() for a in A]
Out[36]: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
或者把它變成一個二維陣列:
In [37]: np.stack(A).mean(axis=1)
Out[37]: array([1., 2., 3., 4., 5., 6.])
您的初始陣列顯示有點模棱兩可。它看起來很像一個陣列串列,只是它缺少逗號。repr陣列的列印會更清晰,更像我的Out[31].
In [38]: print(A)
[array([1, 1, 1]) array([2, 2, 2]) array([3, 3, 3]) array([4, 4, 4])
array([5, 5, 5]) array([6, 6, 6])]
形狀為 (6,) 的物件資料型別陣列與形狀為 (6,3) 的數字資料型別陣列不同。像mean和索引這樣的函式不會“穿過”那個物件邊界。 A沒有“其他”軸;它只有一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/383226.html
下一篇:如何制作缺口矩陣?
