这与this相似,所以请先阅读它以了解我要做什么。在
现在,我想在上课的时候更换实例。什么比如:
import numpy as np
class B():
def __init__(self, a,b):
self.a = a
self.b = b
arr = np.array([ [1,2,3,4,5],[6,7,8,9,10] ])
b1 = np.array([B(100,'a'),
B(11,'b'),
B(300,'c'),
B(33,'d')])
b2 = np.array([B(45,'a'),
B(65,'b'),
B(77,'c'),
B(88,'d')])
# My d array will be like that and I will have to
# run 3 loops as below . I can't change that
d = np.array([[b1],[b2]],dtype=object)
# Replace the elements
for i in d:
for y in i:
for idx,el in enumerate(y):
#y[idx].a = arr.reshape(-1,5) # 5 is the size of every sublength of arr
#print(y[idx].a)
pass
# Show the updated values
for i in d:
for y in i:
for idx,x in enumerate(y):
print(y[idx].a)
我不能使用b = arr.reshape(-1, a.size)
,因为它必须运行在循环。但是,正如我所说的,b
数组将是y[idx].value
,所以我不能仅仅把它放在第3个循环中,因为我将获得错误的结果,也不能将它放在第3个循环之外,因为我无法访问类实例的value
部分。在
我希望我的结果是:
^{pr2}$因此,我只想填充a
部分,例如B类实例。
注意,和前面的问题一样,B
被展开以容纳arr
中的所有5个值。在
简而言之,检查arr
的每个子列表的长度(现在是5),
并更新d
值相应的。所以,如果b1
和b2
有4个值,则它们必须变成5个值(前5个值来自arr
,后5个值来自arr
)。在
这样做替换块。另外请注意,这假设您的arr将严格地以5的倍数表示,并且arr中的块将与示例中给定的一样多,如b1、b2等。在
所以我补充说
然后得到
^{pr2}$将
__repr__
添加到B
我得到添加
生产
将其改为:
生产
将其赋给
b1
,并对a[1,:]
和b2
重复上述操作。在为了更简洁一点,我可以将
new_b
代码编写为函数,并将循环重写为列表理解。在是的,我可以在适当的地方修改
b
,例如但是既然我需要创建一个新的
B
对象来替换None
,那又何必费心呢。我无法将新的B
对象添加到原始的b1
数组中。因此,通过列表创建新数组更简单。在我可以对}进行就地更改:
d
和{我只是用
frompyfunc
作为一种懒人的广播方式arr
对d
进行迭代。请注意,我必须更改arr
以匹配d
形状。{cd19>也不会添加这个。显然你不能在原地做。在我的
B
是玩
frompyfunc
更多:编辑评论
生产
当}(而不是{});因此我们需要对此进行测试
arr
较短时,a
将是{测试:
没有什么特别或神奇的东西,只是要确保我的
if
测试和缩进正确。在相关问题 更多 >
编程相关推荐