我有两个形状相同的二维numpy数组,比方说(10,6)。
第一个数组<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="points__fees">
<div class="points__fees__label">Fees / Charges</div>
<div class="points__fees__value">
<div class="points__fees__value__item" data-type="star$">
<span class="points__fees__text">0</span> Star $
<input class="points__fees__input" value="0" type="hidden">
</div>
<div class="points__fees__value__item" data-type="diamond$">
<span class="points__fees__text">0</span> Diamond $
<input class="points__fees__input" value="0" type="hidden">
</div>
<div class="points__fees__value__item" data-type="gold$">
<span class="points__fees__text">0</span> Gold $
<input class="points__fees__input" value="0" type="hidden">
</div>
</div>
</div>
充满了一些有意义的浮点数。
x
第二个数组x = np.arange(60).reshape(-1,6)
是稀疏数组,每行仅包含2个非零值。
a
然后有一个形状为(10,2)的第三个数组,我想在a = np.zeros((10,6))
for i in range(10):
a[i, 1] = 1
a[i, 2] = 1
不为零的位置将每行的值更新为第一个数组x
。
a
因此原始的v = np.arange(20).reshape(10,2)
和更新的x
将是:
x
和
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35],
[36, 37, 38, 39, 40, 41],
[42, 43, 44, 45, 46, 47],
[48, 49, 50, 51, 52, 53],
[54, 55, 56, 57, 58, 59]])
我尝试了以下方法
array([[ 0, 0, 1, 3, 4, 5],
[ 6, 2, 3, 9, 10, 11],
[12, 4, 5, 15, 16, 17],
[18, 6, 7, 21, 22, 23],
[24, 8, 9, 27, 28, 29],
[30, 10, 11, 33, 34, 35],
[36, 12, 13, 39, 40, 41],
[42, 14, 15, 45, 46, 47],
[48, 16, 17, 51, 52, 53],
[54, 18, 19, 57, 58, 59]])
然后我得到了一个错误x[np.where(a!=0)] = v
这种方法有什么问题,有替代方法吗?非常感谢。
答案 0 :(得分:1)
由于@Divakar的评论,出现此问题是因为赋值标记=
两侧的两个变量的形状不同。
在左侧,表达式x[np.where(a!=0)]
或x[a!=0]
或x[np.nonzero(a)]
的结构不正确,其形状为(20,)
在右边,我们需要一个形状相似的数组来完成分配。因此,简单的ravel()
或reshape(-1)
就可以完成这项工作。
因此解决方案就像x[a!=0] = v.ravel()
一样简单。
答案 1 :(得分:0)
import numpy as np
arrayOne = np.random.rand(6).reshape((2, 3))
arrayTwo = np.asarray([[0,1,2], [1,2,0]])
arrayThree = np.zeros((2, 2))
arrayOne[arrayTwo != 0] = arrayThree.ravel()
print(arrayOne)
[[0.56251284 0. 0. ]
[0. 0. 0.20076913]]
有关编辑的注意事项:上面的解决方案不是我的,所有功劳归Divakar所有。我之所以进行编辑,是因为我先前的答案误解了OP的问题,并且希望避免造成混淆。