用类实例替换数组中的元素

2023-12-04

这类似于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,所以我不能只将它放在第三个循环中,因为我会获得错误的结果,也不能将它放在第三个循环之外,因为我将无法访问value类实例的一部分。

我希望我的结果是:

b1 = np.array([B(1,'a'),
               B(2,'b'),
               B(3,'c'),
               B(4,'d'),
               B(5,'d')])

b2 = np.array([B(6,'a'),
              B(7,'b'),
              B(8,'c'),
              B(9,'d'),
              B(10,'d')])

所以,我只想填写aB 类实例的部分示例。 请注意,和以前一样(在上一个问题中)B被扩展以保存来自的所有 5 个值arr.

简而言之,检查每个子列表的长度arr(现在是 5), 并更新d因此,如果b1 and b2有 4 个值,它们必须变成 5 个值(前 5 个值来自arr以及接下来的 5 个值arr).


所以我添加

print(d.shape)
print(d)

and get

2249:~/mypy$ python3 stack42283851.py 
(2, 1, 4)
[[[<__main__.B object at 0xb71d760c> <__main__.B object at 0xb71d7aac>
   <__main__.B object at 0xb71d7acc> <__main__.B object at 0xb71e5cec>]]

 [[<__main__.B object at 0xb391718c> <__main__.B object at 0xb39171ac>
   <__main__.B object at 0xb39171cc> <__main__.B object at 0xb39171ec>]]]

添加一个__repr__ to B I get

1231:~/mypy$ python3 stack42283851.py 
(2, 1, 4)
[[[B(100, a) B(11, b) B(300, c) B(33, d)]]

 [[B(45, a) B(65, b) B(77, c) B(88, d)]]]

Adding

import itertools
for a,b in itertools.zip_longest(arr[0,:],b1):
     print(a,b)

produces

1 B(100, a)
2 B(11, b)
3 B(300, c)
4 B(33, d)
5 None

将其更改为:

newlist = []
for a,b in itertools.zip_longest(arr[0,:],b1):
    if b is not None:
        new_b = B(a, b.b)
        last_b = b
    else:
        new_b = B(a, last_b.b)
    newlist.append(new_b)
print(np.array(newlist))

produces

[B(1, a) B(2, b) B(3, c) B(4, d) B(5, d)]

将其分配给b1,并重复a[1,:] and b2.

为了更干净一点,我可以这样写new_b代码作为函数,并将循环重写为列表理解。

是的,我可以修改b到位,例如

b.a = a

但因为我需要创建一个新的B对象来替换None, 何必。我无法添加新的B反对原文b1大批。所以通过列表创建新数组更简单。


我可以就地更改d and b1 with:

def replace(a,b):
    b.a = a
f = np.frompyfunc(replace, 2, 1)
f(arr[:,None,:4], d)      # produces array of None; ignore
print(d)
print(b1)

[[[B(1, a) B(2, b) B(3, c) B(4, d)]]  # chgd d

[[B(6, a) B(7, b) B(8, c) B(9, d)]]]
[B(1, a) B(2, b) B(3, c) B(4, d)]    # chgd b1

我只是在使用frompyfunc作为一种懒人的广播方式arr反对d并迭代所有元素。请注意,我必须改变arr匹配d形状。而且这并没有添加任何新的B()。显然你不能就地做到这一点。


My B is

class B():
    def __init__(self, a,b):
        self.a = a
        self.b = b
    def __repr__(self):
        return 'B(%s, %s)'%(self.a, self.b)

和谁玩frompyfunc多一点:

getB_b = np.frompyfunc(lambda x: x.b, 1,1)   # fetch b attributes
print(getB_b(d))
#[[['a' 'b' 'c' 'd']]
#
# [['a' 'b' 'c' 'd']]]

mkB = np.frompyfunc(B, 2,1)   # build array of B() with broadcasting
print(mkB(arr, ['a','b','c','d','e']))
# [[B(1, a) B(2, b) B(3, c) B(4, d) B(5, e)]
#  [B(6, a) B(7, b) B(8, c) B(9, d) B(10, e)]]

print(mkB(arr[:,:4], getB_b(d[:,0,:])))
# [[B(1, a) B(2, b) B(3, c) B(4, d)]
#  [B(6, a) B(7, b) B(8, c) B(9, d)]]

编辑评论

arr1 = np.array([ [1,2],[6,7] ])
newlist = []
for a,b in itertools.zip_longest(arr1[0,:],b1):
    if b is not None:
        new_b = B(a, b.b)
        last_b = b
    else:
        new_b = B(a, last_b.b)
    newlist.append(new_b)
print(np.array(newlist))

produces

[B(1, a) B(2, b) B(None, c) B(None, d)]

When arr较短,aNone(代替b);所以我们需要测试一下

def foo(arr,bn):
    newlist = []
    for a,b in itertools.zip_longest(arr,bn):
        print(a,b)
        if a is None:
            pass
        else:
            if b is not None:
                new_b = B(a, b.b)
                last_b = b
            else:
                new_b = B(a, last_b.b)
            newlist.append(new_b)
    return newlist
print(np.array(foo(arr1[0,:],b1)))  # arr1 shorter
print(np.array(foo(arr[0,:], b2)))  # arr longer 

testing:

1 B(1, a)
2 B(2, b)
None B(3, c)
None B(4, d)
[B(1, a) B(2, b)]

1 B(6, a)
2 B(7, b)
3 B(8, c)
4 B(9, d)
5 None
[B(1, a) B(2, b) B(3, c) B(4, d) B(5, d)]

没什么特别或神奇的;只是确保我得到的问题if测试和缩进正确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用类实例替换数组中的元素 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • PyUSB 1.0:NotImplementedError:此平台不支持或未实现操作

    我刚刚开始使用 pyusb 基本上我正在玩示例代码here https github com walac pyusb blob master docs tutorial rst 我使用的是 Windows 7 64 位 并从以下地址下载 z
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图

随机推荐

  • 如何移动对话中的所有消息?

    我需要知道如何同时移动对话中的所有消息 我的宏当前显示为 Sub Archive Set ArchiveFolder Application GetNamespace MAPI GetDefaultFolder olFolderInbox
  • 如何扩展 KineticJS 形状

    对于 KineticJS 版本4 0 0或者更少的形状扩展了一个类并且可以通过以下方式扩展 var MyCircle Kinetic Circle extend init function config this super config
  • 尝试在 SSE 编程中使用 and 掩码添加 __m128

    我正在尝试使用比较操作的结果添加到 SSE 变量 我刚刚意识到 当使用 mm cmplt ps如果结果为真 则操作将返回 NAN 因为无法表示 0xffffffff 这对我来说没有用 m128 va m128 vb m128 result
  • .NET Core 3.1 始终加密

    使用 NET Core 3 1 和 SQL Always Encrypted 时出现以下错误 3 1支持这个吗 也许我在这里遗漏了一些东西 Keyword not supported column encryption setting 目前
  • 是否可以在 Android 中创建某种全局异常处理程序?

    我的应用程序包括一系列活动 用户必须以线性方式进行这些活动 假设这一系列活动如下所示 A 代表主菜单 B C D E 用户的操作过程如下 A gt B gt C gt D gt E 在这些活动中 用户必须输入数据或允许设备自动获取数据 例如
  • 使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件?

    我将 Symfony 邮件程序配置为使用 Messenger 发送电子邮件 https symfony com doc current mailer html sending messages async 我的电子邮件有两种语言 我依靠请求
  • 将字符向量转换为时间?

    我想将以下字符向量转换为时间变量 times lt c 9 9 2015 16 03 13 9 9 2015 17 03 13 9 9 2015 17 56 38 9 9 2015 17 57 29 9 9 2015 19 52 55 9
  • 如何读取 FastCGI 请求的所有输出?

    我正在尝试使用 Rust 向 PHP 文件发出请求FastCGI协议 感谢以下答案 我得到了这段代码我之前的问题 use std os unix net UnixStream use std io Read Write use std st
  • 将 DIV 缩小到换行到其最大宽度的文本?

    将 div 收缩包装到某些文本非常简单 但是 如果文本由于最大宽度 例如 而换行到第二行 或更多行 则 DIV 的大小不会缩小到新换行的文本 它仍然扩展到断点 在本例中为最大宽度值 导致 DIV 右侧有相当多的边距 当想要将此 DIV 居中
  • Swift iOS 9 NSURLErrorDomain 错误 -1004

    我在 iOS 9 和 iOS 8 上使用 Swift 2 和 Alamofire 在 iOS 8 中 我对 API 的所有请求都工作正常 在 iOS 9 中 它们立即失败 并显示 1004 NSURLErrorDomain 并显示消息 无法
  • C#、Html 敏捷性、选择 div 标签内的每个段落

    例如 如何选择 div 标签中的每个段落 div p Hi p p Help Me Please p p Thankyou p 我已经下载了 Html Agility 并在我的程序中引用 我所需要的只是段落 可能有不同数量的段落 并且有大量
  • 将 jsonb 列值转换为 PostgreSQL 中的多列

    假设我在 PostgreSQL 中有一个表 其中包含以下列 CREATE TABLE sample id int jsonb jsonb date date 我插入了这两行 INSERT INTO sample id jsonb date
  • 如何使用 json.net 忽略类中的属性(如果为 null)

    我在用Json NET将类序列化为 JSON 我有这样的课程 class Test1 JsonProperty id public string ID get set JsonProperty label public string Lab
  • 根据另一列中的行更新列行

    我在 R 中有一个数据集 如下所示 我正在尝试更新 描述 列中的空单元格 以获取 值 列中的 0 值 Criteria Value Description Success 0 Success 21 look up Success 20 re
  • Android 检查 LocationManager 的权限

    我试图在单击活动布局中的按钮时显示 GPS 坐标 以下是单击按钮时调用的方法 public void getLocation View view TextView tv TextView findViewById R id gps coor
  • std::enable_if 的基本用法存在问题

    我正在尝试制作一个简单的模板函数 它给出了一些参数 它输出它们之间有一个空格 其中一些可以是枚举的元素 在这种情况下我想输出它的整数值 这是我的代码 include
  • 为生产者消费者问题的变体选择数据结构

    现在 我有一个队列 有多个生产者和单个消费者 消费者线程操作缓慢 此外 消费者通过 peek 操作从队列中取出元素 并且在消费操作完成之前 无法从队列中删除该元素 这是因为生产者线程作为辅助操作还会拍摄当时未完全处理的所有元素的快照 现在
  • 如何禁用 XPage 的客户端验证?

    我知道我可以通过以下方式禁用 xsp properties 中的服务器或应用程序 xsp client validation false 在控制层面通过 disableClientSideValidation true 如果没有为每个控件设
  • 无法联系 pgAdmin 4 服务器:致命错误

    我将 PostgreSQL 从 13 3 升级到 13 4 并收到 pgAdmin 4 的致命错误 我发现其他类似的问题尝试解决删除文件夹的问题 C Users myusername AppData Roaming pgadmin sess
  • 用类实例替换数组中的元素

    这类似于this所以请先阅读它以了解我想要做什么 现在 我想在有类实例时进行替换 例如 import numpy as np class B def init self a b self a a self b b arr np array