![](/img/trans.png)
[英]How to add a 1d array to a 2d array element-wise to get a 3d array in numpy
[英]Map 1d numpy array to 2d array based on element-wise function
我有一個numpy數組,它有shape=(10000,)
。 以下是前5個條目:
labels = data[:, 0]
print(labels.shape)
print(labels[0:5])
# prints
# (100000,)
# [1. 1. 1. 0. 1.]
每個條目都是0或1.我想通過映射的元素操作將其映射到2d數組
0 -> [1, 0]
1 -> [0, 1]
我該怎么做呢? 我試過了
labels = np.apply_along_axis(lambda x: [1, 0] if x[0] == 0 else [0, 1], 0, data[:, 0])
但這似乎不起作用。
In [435]: ref = np.array([[1,0],[0,1]])
In [436]: index = np.array([1.,1.,1.,0.,1.])
使用浮點數進行索引會在最近的版本中出錯:
In [437]: ref[index,:]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-437-d50c95668d6c> in <module>()
----> 1 ref[index,:]
IndexError: arrays used as indices must be of integer (or boolean) type
使用整數索引,根據index
值從ref
選擇行:
In [438]: ref[index.astype(int),:]
Out[438]:
array([[0, 1],
[0, 1],
[0, 1],
[1, 0],
[0, 1]])
這是一個可以使用choose
的情況,但它比數字索引的數組形狀更挑剔:
In [440]: np.choose(index.astype(int)[:,None],[[1,0],[0,1]])
Out[440]:
array([[0, 1],
[0, 1],
[0, 1],
[1, 0],
[0, 1]])
或只有2個轉換為布爾值的選項, where
:
In [443]: np.where(index.astype(bool)[:,None],[0,1],[1,0])
Out[443]:
array([[0, 1],
[0, 1],
[0, 1],
[1, 0],
[0, 1]])
您可以嘗試以下方法
labels = np.array([1,1,1,0,1])
np.eye(np.max(labels) + 1)[labels]
這使:
array([[ 0., 1.],
[ 0., 1.],
[ 0., 1.],
[ 1., 0.],
[ 0., 1.]])
此方法對原始數組執行xor並將兩個數組堆疊在一起。
labels = np.random.randint(0,2, 10000)
# array([0, 0, 1, ..., 1, 1, 0])
np.vstack([(~labels.astype(bool)).astype(int), labels])
array([[1, 1, 0, ..., 0, 0, 1],
[0, 0, 1, ..., 1, 1, 0]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.